android.os.FileUriExposedException 自动安装APK报错 5分钟搞定Android 7.0+ FileProvider
android.os.FileUriExposedException 自动安装APK报错 5分钟搞定Android 7.0+ FileProvider
- 适配步骤:
- 1. 创建file_paths.xml文件,放到项目res/xml目录下;
- 2. 在AndroidManifest.xml文件中配置provider;
- 3. 修改代码中的Uri获取方式;
开发自动更新安装APK的时候,遇到报错:
android.os.FileUriExposedException: file:///storage/emulated/0/xx/xx.apk exposed beyond app through Intent.getData();
不要慌,5分钟搞定它!
适配步骤:
1. 创建file_paths.xml文件,放到项目res/xml目录下;
名称"YourName"可以修改为你想要的;
<paths xmlns:android="http://schemas.android.com/apk/res/android"><!--files-path 代表:Context.getFilesDir().--><!--cache-path 代表:getCacheDir().--><!--extenal-path 代表:Environment.getExternalStorageDirectory().--><!--external-files-path 代表:Context#getExternalFilesDir(String) Context.getExternalFilesDir(null).--><!--external-cache-path 代表:Context.getExternalCacheDir().--><!--root-path 代表:系统根目录”/“--><!--表示Context.getFilesDir()目录或者其子目录。 示例 : /data/data/你的app包名/files/test1--><!--<files-path name="name1" path="test1" />--><!--表示Context.getCacheDir()目录或者其子目录。 示例 : /data/data/你的app包名/cache/test2--><!--<cache-path name="name2" path="test2" />--><!--表示Environment.getExternalStorageDirectory()目录或者其子目录。 示例 : /storage/emulated/0/test3--><!--<external-path name="name3" path="test3" />--><!--表示Context.getExternalFilesDir(null)目录或者其子目录。 示例 : /storage/emulated/0/Android/data/你的app包名/files/test4--><!--<external-files-path name="name4" path="test4" />--><!--表示Context.getExternalCacheDir()目录或者其子目录。 示例 : /storage/emulated/0/Android/data/你的app包名/cache/test5--><!--<external-cache-path name="myapk" path="test5" />--><!--表示 系统根目录”/“--><root-path name="YourName" path="." />
</paths>
2. 在AndroidManifest.xml文件中配置provider;
修改"你的app包名"为app的包名;
<application><providerandroid:name="android.support.v4.content.FileProvider"android:authorities="你的app包名.fileProvider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>
</application>
3. 修改代码中的Uri获取方式;
apkFile是要安装的目标apk文件;
String MIME_TYPE_APP = "application/vnd.android.package-archive";// 通过Intent安装APK文件Intent intents = new Intent(Intent.ACTION_VIEW);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);intents.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intents.setDataAndType(contentUri, MIME_TYPE_APP);} else {intents.setDataAndType(Uri.parse("file://" + apkFile.toString()), MIME_TYPE_APP);}intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intents);
至此,自动安装APK已经完成;
android.os.FileUriExposedException 自动安装APK报错 5分钟搞定Android 7.0+ FileProvider相关推荐
- jpush android 离线推送,JPush极光推送3分钟搞定Android Push
在 Android 上,要实现 Push 功能可没有那么简单! 众所周知的原因是,Android 官方的推送服务 GCM 在国内手机上用不了.所以很多国内的开发者,不得不去使用 AndroidPN 这 ...
- 我的Android进阶之旅------解决Android Studio编译后安装apk报错:The APK file does not exist on disk...
1.错误描述 今天用Android Studio编译应用后安装APK的时候,报错了,错误如下所示: The APK file build\outputs\apk\OYP_2.3.4_I2Base_64 ...
- 解决Android Studio编译后安装apk报错:The APK file does not exist on disk
1.错误描述 今天用Android Studio编译应用后安装APK的时候,报错了,错误如下所示: The APK file build\outputs\apk\OYP_2.3.4_I2Base_64 ...
- android 编译报错 xm*,解决Android Studio编译后安装apk报错:The APK file does not exist on disk...
版权声明:本文为[欧阳鹏]原创文章,欢迎转载,转载请注明出处! [http://blog.csdn.net/ouyang_peng] 1.错误描述 今天用Android Studio编译应用后安装AP ...
- 解决Android Studio编译后安装apk报错:Error while Installing APK
刚开始玩 Android ,用Android studio 连接真机做测试,在虚拟机上没有问题,但是真机就会报错 检查了好多地方,最终发现了问题,网上的常规就不介绍了,大家自己去看别的帖子 手机方面 ...
- Android P使用pm install安装apk报错
Android P使用pm install安装apk报错 avc: denied { read } for scontext=u:r:system_server:s0 tcontext=u:objec ...
- 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法
安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法 参考文章: (1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决 ...
- 安装APK报错解决方法
adb install xxx.apk 报错,安装APK报错:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE.INSTALL_PARSE_FAILED_INCONSIS ...
- 安装APK报错解决方法【转】
本文转载自:http://blog.csdn.net/zy1235678/article/details/38122827 adb install xxx.apk 报错,安装APK报错:INSTALL ...
最新文章
- 并发编程-12线程安全策略之常见的线程不安全类
- 元气骑士里的超级计算机,元气骑士:本以为“素颜相机”够火,直到看到它,一秒笑出猪叫声...
- [java进阶]3.slf4j作用及其实现原理
- 记一次曲折的后台getshell过程
- 经典蓝牙和低功耗蓝牙(BLE)有什么区别?
- python导入模块中的对象_详解Python项目开发时自定义模块中对象的导入和使用
- hdu5358 ( First One )数学+思维
- 金色圣诞幻灯片AE模板
- 多线程(Thread的类的运用-Runnable类的使用/多线程的注意点)
- 第20节 信息化基础知识
- 高德地图JS-API开发—Marker添加及infoWindow处理
- 如何实现跨行跨地区转账实时到帐而且免手续费?
- (25)Verilog实现三态门(inout)
- python魔方方法__getitem__、__setitem__和__len__
- 【致远FAQ】Guest 账号同时多人登陆导致OA卡顿
- python swapcase用法_python中swapcase是什么意思
- DNS协议 : RFC1035 中文
- NAS开通外网访问功能的三种方法
- 一次搞懂:正数 负数 左移<< 右移>> 移位运算规则 移位后的空位添补规则
- 平安科技联络云荣膺金融科技最佳云联络中心服务商