在Android中,如果你在Android 7.0(API级别24)或更高版本中使用了file://
URI来共享文件,就会发生android.os.FileUriExposedException
异常。这是由于Android 7.0引入了一项安全性更新,要求你使用文件共享时使用FileProvider
来生成一个content:// URI。
下面是一个解决方法,使用FileProvider
来解决android.os.FileUriExposedException
异常的问题。
AndroidManifest.xml
文件中,添加一个FileProvider
的声明,如下所示:
...
...
res/xml
文件夹中创建一个file_paths.xml
文件,内容如下所示:
这个file_paths.xml
文件定义了你要共享的文件路径。在这个例子中,我们使用了外部存储的根目录。
FileProvider.getUriForFile()
方法来获取文件的content:// URI,如下所示:File file = new File(filePath);
Uri fileUri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file);
这个例子中,filePath
是你要共享的文件的路径,context
是当前的上下文对象。
Intent.FLAG_GRANT_READ_URI_PERMISSION
标志,如下所示:Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, "Share Image"));
这个例子中,我们使用了ACTION_SEND
动作来共享文件,fileUri
是我们之前获取的URI。
通过这种方式,你就可以在Android应用程序中解决android.os.FileUriExposedException
异常,并且可以安全地共享文件。