android 打开本地文件
这个是别人的代码,自己忘了地址,只是给自己记录插个眼
获取本地文件
在MainActivity 中写方法
/*** android 打开本地文件* @param path 本地文件路径(带文件名)*/public void openFileNew(String path, Context context) {try {File file = new File(path);Uri uri = null;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//24 android7uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);} else {uri = Uri.fromFile(file);}context.grantUriPermission(context.getPackageName(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);Intent intent2 = new Intent("android.intent.action.VIEW");intent2.addCategory("android.intent.category.DEFAULT");intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent2.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);Log.d("sss", "opneFile: uri " + uri.toString());String type = AndroidFileUtil.getMIMEtype(path);intent2.setDataAndType(uri, type);context.startActivity(intent2);} catch (Exception e) {Log.d("sss", "loadAccessorySuccess: error " + e.toString());}}
再写获取文件类型的方法
public class AndroidFileUtil {public static String getMIMEtype(String path){String type="*/*";//获取后缀名前的分隔符“.”在fileName中的位置int dotIntex=path.lastIndexOf(".");if(dotIntex<0){return type;}/*获取文件的后缀*/String fileType=path.substring(dotIntex,path.length()).toLowerCase();if(fileType==null||"".equals(fileType)){return type;}//在MIME和文件类型的匹配表中找到对应的mime 类型for(int i=0;i<MIME_MapTable.length;i++){if(fileType.equals(MIME_MapTable[i][0])){type=MIME_MapTable[i][1];}}return type;}private static final String[][] MIME_MapTable = {//{后缀名, MIME类型}{".3gp", "video/3gpp"},{".apk", "application/vnd.android.package-archive"},{".asf", "video/x-ms-asf"},{".avi", "video/x-msvideo"},{".bin", "application/octet-stream"},{".bmp", "image/bmp"},{".c", "text/plain"},{".class", "application/octet-stream"},{".conf", "text/plain"},{".cpp", "text/plain"},{".doc", "application/msword"},{".docx", "application/msword"},{".exe", "application/octet-stream"},{".gif", "image/gif"},{".gtar", "application/x-gtar"},{".gz", "application/x-gzip"},{".h", "text/plain"},{".htm", "text/html"},{".html", "text/html"},{".jar", "application/java-archive"},{".java", "text/plain"},{".jpeg", "image/jpeg"},{".jpg", "image/jpeg"},{".js", "application/x-javascript"},{".log", "text/plain"},{".m3u", "audio/x-mpegurl"},{".m4a", "audio/mp4a-latm"},{".m4b", "audio/mp4a-latm"},{".m4p", "audio/mp4a-latm"},{".m4u", "video/vnd.mpegurl"},{".m4v", "video/x-m4v"},{".mov", "video/quicktime"},{".mp2", "audio/x-mpeg"},{".mp3", "audio/x-mpeg"},{".mp4", "video/mp4"},{".mpc", "application/vnd.mpohun.certificate"},{".mpe", "video/mpeg"},{".mpeg", "video/mpeg"},{".mpg", "video/mpeg"},{".mpg4", "video/mp4"},{".mpga", "audio/mpeg"},{".msg", "application/vnd.ms-outlook"},{".ogg", "audio/ogg"},{".pdf", "application/pdf"},{".png", "image/png"},{".pps", "application/vnd.ms-powerpoint"},{".ppt", "application/vnd.ms-powerpoint"},{".prop", "text/plain"},{".rar", "application/x-rar-compressed"},{".rc", "text/plain"},{".rmvb", "audio/x-pn-realaudio"},{".rtf", "application/rtf"},{".sh", "text/plain"},{".tar", "application/x-tar"},{".tgz", "application/x-compressed"},{".txt", "text/plain"},{".wav", "audio/x-wav"},{".wma", "audio/x-ms-wma"},{".wmv", "audio/x-ms-wmv"},{".wps", "application/vnd.ms-works"},//{".xml", "text/xml"},{".xml", "text/plain"},{".xls", "application/vnd.ms-excel"},{".xlsx", "application/vnd.ms-excel"},{".z", "application/x-compress"},{".zip", "application/zip"},{"", "*/*"}};
}
这时还未结束
还需要进行配置
在res 目录下创建xml 文件夹
创建filepaths.xml 文件
filepaths 中的内容为
<paths xmlns:android="http://schemas.android.com/apk/res/android"><external-path name="external" path="."/>
</paths>
在AndroidManifest.xml 文件中增加
<providerandroid:authorities="你的包名.fileprovider"android:name="androidx.core.content.FileProvider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/filepaths" /></provider>
当然最后还需要添加权限,高版本需要动态申请权限了
AndroidManifest.xml 中进行添加权限
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在MainActivity 中动态申请权限方式
在onCreate 中添加
//读写权限private static String[] PERMISSIONS_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE};//请求状态码private static int REQUEST_PERMISSION_CODE = 1;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE);}}
然后就OK了
android 打开本地文件相关推荐
- android本地xml文件怎么打开,android 打开本地文件
首先要知道的是,Android 打开本地文件是根据类型打开的,也就是根据文件的 MIME 类型来确定 如果不知道是什么类型,那就是 : */* 类型匹配表: private static final ...
- Android实现打开本地文件,Android 打开本地文件(示例代码)
Android 打开本地的文件,目前来说,其实很常见.而且现在有手机版的office了.查看office的全家桶就更加方便. 首先要知道的是,Android 打开本地文件是根据类型打开的,也就是根据文 ...
- Android调用系统安装程序打开本地文件(包括 Android7.0以上)
前言 在 Android 手机文件管理中,点击某个文件的时候,会弹出选择打开文件的方式,那么,如果在我们自己的软件中要实现这种效果该怎么做呢?其实 Android 打开本地文件很常见,打开的时候会根据 ...
- 服务器读取本地文件,如何在云服务器上打开本地文件
如何在云服务器上打开本地文件 内容精选 换一换 边缘节点上报应用日志和系统日志需要打开日志开关,且边缘节点的NTP与华为云一致.如果看不到日志,可能有如下原因:日志开关未打开.登录IEF控制台,在左侧 ...
- 服务器怎么打开本地电脑文件夹,如何在云服务器上打开本地文件夹
如何在云服务器上打开本地文件夹 内容精选 换一换 Tomcat是一个被广泛使用的Java Web应用服务器.本文介绍了在华为云弹性云服务器上部署Java Web环境的操作步骤.首先需要下载部署Java ...
- 用QFileDialog::getOpenFileUrls打开本地文件:指定路径
QString openFilePath = "file:///" + ProcessingModuleProxy::getInstance().getImportPath();Q ...
- Element-UI中打开本地文件
Element-UI中打开本地文件 一.问题 二.html部分 三.js部分 四.上一个/下一个 一.问题 有时候我们要打开本地文件直接在页面上查看,怎么用Element-UI提供的功能实现? 二.h ...
- 在excel中打开本地文件或文件夹
效果演示: A2中输入本地文件或文件夹绝对路径 B2中输入公式 =HYPERLINK(A2) 然后回车保存,再次点击B2中的链接会直接打开本地文件夹或文件
- java web打开文件_Java web 如何打开本地文件夹?
使用情景 有一个只在一台 Windows7 上使用的 Java web 项目,浏览器是 Chrome.它需要点击一个链接可以打开指定的本地文件夹,目录会有中文. 服务器环境 Jdk1.7.Tomcat ...
最新文章
- java二维数组从键盘更改_互换二维数组的行列。要求数组的行数、列数以及各元素均从键盘输入;输出互换前数组内容和互换后数组内容。(要求循环输入进行测试)Java...
- 批量下载的实现及java.lang.IllegalStateException异常
- python 一次编辑
- 获取IOS应用的子目录
- python爬虫反爬机制_浅谈爬虫及绕过网站反爬取机制之Python深度应用
- python不同目录调用_python3 不同目录间模块调用
- 分布式理论-CAP定理
- 06-02 Jenkins job 机制
- 外部操作获取iframe的东西
- EasyDarwin接口的使用——使用C++编写客户端实现与EasyDarwin服务器的交互
- 如何绘制一幅优雅的列线图
- Linux系统Ubuntu安装kvaser Leaf Light V2驱动
- videojs创建control-bar组件,实现点击播放下一视频
- ffmpeg转mov为mp4
- 苹果系统下载了python软件怎么卸载_mac怎么卸载pycharm
- 苹果cms是什么东西?
- Eigen学习3:矩阵及向量运算
- CAD二次开发——通过Ribbon界面来运行程序
- Python之freshman07 面向对象编程jinjie
- Excel表格防止重复录入数据
热门文章
- 什么是接口测试?为什么要做接口测试?【建议收藏】
- 非root用户安装python_zzw_非root用户安装python3.5
- zzw原创_oracle循环中的异常捕捉_捕捉异常后并继续循环
- oracle怎么测试包,Oracle内置IO测试包dbms_resource_manager.CALIBRATE_IO
- 微信阅读量10万+文章是怎样炼成的?
- 基于3Ds Max实现客厅的设计与实现.docx(毕业设计、成绩评定评分表、成绩评定评审等级表)
- 2021年高考成绩长兴中学查询,长兴中学2018高考喜报
- vue如何通过Nginx代理做到跨域访问API接口 解决404报错
- 苏州新区c语言培训,苏州哪些地方可以培训C语言
- 揭密网站百度快照不更新原因