在Android 9(API级别28)及更高版本中,为了提高应用程序的安全性,系统限制了应用程序在文件系统中访问其他应用程序的私有文件。这导致了在某些情况下,当使用旧的方式在应用程序中使用File URI时,会出现FileUriExposedException异常。
要解决这个问题,可以使用以下两种方法之一:
使用FileProvider:
...
...
File file = new File(Environment.getExternalStorageDirectory(), "example.jpg");
Uri fileUri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file);
使用Intent.FLAG_GRANT_READ_URI_PERMISSION标志:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "image/jpeg");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
注意:如果你的应用程序使用了targetSdkVersion 24或更高版本,并且你正在使用了旧的方式在应用程序中使用File URI,那么你必须使用上述方法之一来解决这个问题。