android.os.FileUriExposedException: file:///storage/emulated/0/Pictures/photo.jpg exposed beyond app through ClipData.Item.getUri()
时间: 2023-06-21 18:11:30 浏览: 282
这个异常是因为在 Android 7.0 以上的版本中,为了加强应用程序的安全性,Android 引入了一些新的限制。其中一个限制就是应用程序不能再直接使用 file:// URI 访问其他应用程序的文件。如果你的应用程序试图跨应用程序共享文件,而没有正确地使用 FileProvider API,那么就会抛出这个异常。
解决这个问题的方法是使用 FileProvider API 来共享文件。FileProvider 是一个特殊的 ContentProvider,它允许你共享你的应用程序的私有文件与其他应用程序。以下是一个简单的示例代码:
1. 在 AndroidManifest.xml 文件中添加如下内容:
```xml
<application>
<!-- ... -->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
</application>
```
2. 在 res/xml 目录下创建一个 file_paths.xml 文件,内容如下:
```xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
```
3. 在你的代码中使用以下代码来获取 FileProvider 的 URI:
```java
File photoFile = new File(getExternalFilesDir(null), "photo.jpg");
Uri photoUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", photoFile);
```
这样就可以使用 FileProvider API 共享你的文件了,而不会再出现 "FileUriExposedException" 异常了。
阅读全文