请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

houcx

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1380|回复: 0

解决 Android N 7.0 上 报错:android.os.FileUriExposedException

[复制链接]

216

主题

218

帖子

1089

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1089
发表于 2018-3-7 16:55:04 | 显示全部楼层 |阅读模式
解决 Android N 上 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/appName-2.3.0.apk exposed beyond app through Intent.getData()


解决方法1、在AndroidManifest.xml中添加如下代码<provider    android:name="android.support.v4.content.FileProvider"    android:authorities="app的包名.fileProvider"    android:grantUriPermissions="true"    android:exported="false">    <meta-data        android:name="android.support.FILE_PROVIDER_PATHS"        android:resource="@xml/file_paths" /></provider>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意:
authorities:app的包名.fileProvider
grantUriPermissions:必须是true,表示授予 URI 临时访问权限
exported:必须是false
resource:中的@xml/file_paths是我们接下来要添加的文件

2、在res目录下新建一个xml文件夹,并且新建一个file_paths的xml文件(如下图)

3、打开file_paths.xml文件添加如下内容<?xml version="1.0" encoding="utf-8"?><paths>    <external-path path="Android/data/app的包名/" name="files_root" />    <external-path path="." name="external_storage_root" /></paths>
  • 1
  • 2
  • 3
  • 4
  • 5

path:需要临时授权访问的路径(.代表所有路径)
name:就是你给这个访问路径起个名字

4、修改代码适配Android NIntent intent = new Intent(Intent.ACTION_VIEW);//判断是否是AndroidN以及更高的版本if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);    Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);    intent.setDataAndType(contentUri, "application/vnd.android.package-archive");} else {    intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);}startActivity(intent);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

1、首先我们对Android N及以上做判断;
2、然后添加flags,表明我们要被授予什么样的临时权限
3、以前我们直接 Uri.fromFile(apkFile)构建出一个Uri,现在我们使用FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);
4、BuildConfig.APPLICATION_ID直接是应用的包名

参考地址


来自:http://blog.csdn.net/yy1300326388/article/details/52787853


[发帖际遇]: admin 乐于助人,奖励 6 贡献. 幸运榜 / 衰神榜
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|houcx ( 京ICP备15004793号  

GMT+8, 2019-1-24 10:57 , Processed in 0.063286 second(s), 27 queries .

Powered by houcx! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表