我正在使用Firebase的构建变体,我的应用程序还需要使用FileProvider来共享在第三方应用程序中打开的应用程序文件。 但是当我尝试在意图中发送URI时,应用程序崩溃会发出以下错误。
error:java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/com.example.debug/files/Pictures/JPEG_20170919_113955_102027655.jpg
继承我的配置
String authority = getString(R.string.authority_provider);
Uri fileUri = FileProvider.getUriForFile(context, authority, file);
在应用程序标记内部的AndroidManifest.xml中添加了文件提供程序:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="@string/authority_provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="my_images" path="Android/data/${applicationId}/files/Pictures" />
<external-file-path name="my_images" path="Android/data/${applicationId}/files/Pictures" />
</paths>
由于Firebase
要求使用2个应用程序ID来保留崩溃日志,因此在Firebase控制台中将分析分开
字符串:authority_provider - 已添加到build.gradle(app)中:
buildTypes {
release {
---
applicationIdSuffix "com.example"
resValue "string", "authority_provider", "\"com.example.fileprovider\""
---
}
debug {
---
applicationIdSuffix '.debug'
resValue "string", "authority_provider", "\"com.example.debug.fileprovider\""
---
}
}
文件:将文件创建到ExternalFilesDir并将下载的数据保存到其中,并使用相同的文件对象获取URI。
File storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File file = File.createTempFile(fileName, fileExtension, storageDir);
我尝试过以下解决方案来解决但不适合我:
此后也关注此博文。