同意@x-code的回答,您描述的问题不是很清楚,但如果您尝试访问另一个应用程序的内部数据,则必须获得相应的权限。
文件属于您的应用程序,并且在用户卸载应用程序时应该被删除。尽管这些文件从技术上来说可以被用户和其他应用程序访问,因为它们存储在外部存储中,但实际上它们是没有提供给用户使用价值的文件,只能在您的应用程序内使用。
实际上,我在文档中发现SDK版本24现在已经更新了许多方案,并且在处理文件时有了重大变化,从文档中可以看到关于file://的问题描述如下:
将file:// URI传递到包域之外可能会导致接收者无法访问路径。因此,尝试传递file:// URI会触发FileUriExposedException。共享私有文件内容的推荐方法是使用FileProvider。
出于安全原因,强烈建议使用Content://而不是使用file://,因此应使用ContentProvider而不是FileProvider。
以下是使用它的简单示例:
在AndroidMenifest.xml
中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<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>
然后在res
文件夹下的xml
文件夹中创建一个_paths.xml
提供程序文件。如果不存在该文件夹,则需要创建。
文件的内容如下所示。它描述了我们希望使用名称external_files
与根文件夹(path=".")
共享访问外部存储器。
res/xml/provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
现在要使用它,
Uri photoURI = FileProvider.getUriForFile(MainActivity.this,
BuildConfig.APPLICATION_ID + ".provider",
createImageFile())
我从这篇博客中获取了以下内容,请阅读以全面理解。希望能帮到大家。