Android 7.0 适配 android.os.FileUriExposedException: file://***** exposed beyond app through Intent.getData() 的解决方法

如果你的安卓程序的targetSdkVersion是24以上,也就是7.0。你需要使用FileProvider向其他应用提供文件,而不是随便地利用文件地址就可以。也就是说你需要使用 content:// 来代替file://。接下来提供步骤:

  • 你最好提供自己的FileProvider扩展,而不是直接使用android.support.v4.content.FileProvider,以防止与其他app和库冲突。
public class MyFileProvider extends FileProvider {
}
  • 接下来,在AndroidManifest.xml中,添加一个provider标签
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    <application
        ...
        <provider
            android:name=".MyFileProvider"
            android:authorities="${applicationId}.my.package.name.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>
    </application>
</manifest>
  • 你应该注意到,其中有一个xml资源,没错,你需要定义一个xml文件来说明你需要提供的文件路径
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

在这个例子中,我们指出需要获取外部储存的根路径,用.表示。

  • 最后,你就可以获取文件Uri了,注意,你需要FLAG_GRANT_READ_URI_PERMISSION权限来完成这个工作。比如在intent中,获取uri地址来安装apk:
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".fileProvider", apkfile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
startActivity(intent);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上周,写了个小demo,正好同事使用的小米手机系统内核更新到7.0,遂拿来测试了一番。其中遇到的小问题,现在来跟大...
    monkey_who阅读 10,163评论 0 13
  • 由于 Android 7.0 或更高版本的系统在国内手机市场上的占比不是很高,很多 Android 开发人员并没有...
    亦枫阅读 9,781评论 1 39
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,408评论 19 139
  • 时间就是窗外山坡上的那只羊。它低头吃草,时间就开始流动;它抬头看天,时间于是静止。 但那是在红城大礼堂之外。在红城...
    南吕先生阅读 2,350评论 3 9
  • 人生如初见 故事的主人公是一位初 姓的女子!大龄女青年 ,实属,因为年芳三字当头 !在2016年11月11日的第二...
    小凡平凡的凡阅读 1,586评论 0 1