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相关推荐

  1. jpush android 离线推送,JPush极光推送3分钟搞定Android Push

    在 Android 上,要实现 Push 功能可没有那么简单! 众所周知的原因是,Android 官方的推送服务 GCM 在国内手机上用不了.所以很多国内的开发者,不得不去使用 AndroidPN 这 ...

  2. 我的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 ...

  3. 解决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 ...

  4. android 编译报错 xm*,解决Android Studio编译后安装apk报错:The APK file does not exist on disk...

    版权声明:本文为[欧阳鹏]原创文章,欢迎转载,转载请注明出处! [http://blog.csdn.net/ouyang_peng] 1.错误描述 今天用Android Studio编译应用后安装AP ...

  5. 解决Android Studio编译后安装apk报错:Error while Installing APK

    刚开始玩 Android ,用Android studio  连接真机做测试,在虚拟机上没有问题,但是真机就会报错 检查了好多地方,最终发现了问题,网上的常规就不介绍了,大家自己去看别的帖子 手机方面 ...

  6. Android P使用pm install安装apk报错

    Android P使用pm install安装apk报错 avc: denied { read } for scontext=u:r:system_server:s0 tcontext=u:objec ...

  7. 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法

    安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法 参考文章: (1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决 ...

  8. 安装APK报错解决方法

    adb install xxx.apk 报错,安装APK报错:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE.INSTALL_PARSE_FAILED_INCONSIS ...

  9. 安装APK报错解决方法【转】

    本文转载自:http://blog.csdn.net/zy1235678/article/details/38122827 adb install xxx.apk 报错,安装APK报错:INSTALL ...

最新文章

  1. 并发编程-12线程安全策略之常见的线程不安全类
  2. 元气骑士里的超级计算机,元气骑士:本以为“素颜相机”够火,直到看到它,一秒笑出猪叫声...
  3. [java进阶]3.slf4j作用及其实现原理
  4. 记一次曲折的后台getshell过程
  5. 经典蓝牙和低功耗蓝牙(BLE)有什么区别?
  6. python导入模块中的对象_详解Python项目开发时自定义模块中对象的导入和使用
  7. hdu5358 ( First One )数学+思维
  8. 金色圣诞幻灯片AE模板
  9. 多线程(Thread的类的运用-Runnable类的使用/多线程的注意点)
  10. 第20节 信息化基础知识
  11. 高德地图JS-API开发—Marker添加及infoWindow处理
  12. 如何实现跨行跨地区转账实时到帐而且免手续费?
  13. (25)Verilog实现三态门(inout)
  14. python魔方方法__getitem__、__setitem__和__len__
  15. 【致远FAQ】Guest 账号同时多人登陆导致OA卡顿
  16. python swapcase用法_python中swapcase是什么意思
  17. DNS协议 : RFC1035 中文
  18. NAS开通外网访问功能的三种方法
  19. 一次搞懂:正数 负数 左移<< 右移>> 移位运算规则 移位后的空位添补规则
  20. 平安科技联络云荣膺金融科技最佳云联络中心服务商

热门文章

  1. mysql中MAX函数使用注意点
  2. 财智滙APP iOS技术支持
  3. 华硕灵耀14和x14区别
  4. 清轩云DS系统源码V2.0最新UI面板分享
  5. matcom安装时无法寻找到matlab.exe的解决办法
  6. fume fx 汉化_fumefx max2016下载
  7. JAVA中JCL是什么简称_jcl是什么意思啊
  8. 知彼知己者,百战不殆;不知彼而知己,一胜一负;不知彼不知己,每战必殆
  9. 人人商城中{ifp }函数的意思
  10. 电子产品为什么一定要3C认证?