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资源,没错,你需要定义一个xml文件来说明你需要提供的文件路径


    

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

  • 最后,你就可以获取文件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);

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