这个异常通常出现在 Android 7.0(API级别24)及更高版本上,由于对文件URI的访问限制更加严格导致的。下面是几种解决方法,你可以根据你的需求选择适合你的方法:
方法1:使用FileProvider
Uri fileUri = FileProvider.getUriForFile(context, "your.package.name.fileprovider", file);
这样就可以避免FileUriExposedException异常。
方法2:使用Intent.FLAG_GRANT_READ_URI_PERMISSION标志
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "image/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
这样在启动Intent时,会授予对URI的读取权限,避免了FileUriExposedException异常。
方法3:使用StrictMode.disableDeathOnFileUriExposure()
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
这样可以禁用严格模式的文件URI暴露检测,但不推荐在生产环境中使用,因为这会降低应用的安全性。
请根据你的具体需求选择适合你的解决方法,并根据你的应用程序进行相应的修改。
上一篇:Android.OS.Environment.GetExternalStoragePublicDirectory已经被弃用。有何替代方法?
下一篇:android.os.FileUriExposedException:<filename>通过Intent.getData()暴露给应用程序之外。