android.os.FileUriExposedException: file:///storage/emulated/0/temp.png exposed beyond app through ClipData.Item.getUri()为什么出现这个问题,怎么解决
时间: 2023-06-29 10:16:25 浏览: 211
项目配置说明和注意事项1
这个问题通常是由于 Android 7.0 以上版本中的安全限制所导致的。从 Android 7.0 开始,为了提高应用程序的安全性,禁止应用程序向外部提供 file:// URI。如果您尝试使用 file:// URI 共享文件,那么就会出现该异常。
解决这个问题的方法是使用 FileProvider 来共享文件。具体步骤如下:
1. 在您的 AndroidManifest.xml 文件中添加 FileProvider。
```xml
<manifest ...>
<application ...>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
...
</application>
</manifest>
```
2. 在 res/xml 目录下创建一个名为 provider_paths.xml 的文件,并添加以下内容:
```xml
<paths>
<external-path name="external_files" path="." />
</paths>
```
这将允许您在应用程序的外部共享您的文件。
3. 用 FileProvider.getUriForFile() 方法替换 file:// URI。例如:
```java
File file = new File(getExternalFilesDir(null), "temp.png");
Uri uri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", file);
```
现在,您可以使用创建的 URI 共享文件,而不会出现 FileUriExposedException 异常。
阅读全文