整理: 解决Android7.0以上文件报FileUriExposedException问题

最近项目Android编译版本改为targetSdkVersion26, 之前隐藏的版本问题暴露出来, 尤其是文件第三方打开及Apk更新问题,这里记录下7.0以后文件相关问题

问题描述:

安装apk的代码一般写法如下,网上随处可以搜到:

public static void installApk(Context context, File file) {  Intent intent = new Intent(Intent.ACTION_VIEW);      Uri data = Uri.fromFile(file);      intent.setDataAndType(data, "application/vnd.android.package-archive");      context.startActivity(intent);  }  

然而,当我们在Android7.0手机中执行时,会发现报如下错误日志


Caused by: android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/net.csdn.blog.ruancoder/cache/test.apk exposed beyond app through Intent.getData()     at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)     at android.net.Uri.checkFileUriExposed(Uri.java:2346)     at android.content.Intent.prepareToLeaveProcess(Intent.java:8933)     at android.content.Intent.prepareToLeaveProcess(Intent.java:8894)     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1517)     at android.app.Activity.startActivityForResult(Activity.java:4224)     at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)     at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)     at android.app.Activity.startActivityForResult(Activity.java:4183)     at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)     at android.app.Activity.startActivity(Activity.java:4507)     at android.app.Activity.startActivity(Activity.java:4475)  


解决方案及介绍 一 (详细)

解决方案,由衷感谢

你可能感兴趣的:(整理: 解决Android7.0以上文件报FileUriExposedException问题)