问题是当我打电话给
getTmpFileUri()
时,我得到这样的信息:
java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.sample.myapp/cache/tmp_image_file_1764639852023756356.jpg
这是我获取 Uri 的代码:
fun getTmpFileUri(context: Context, cacheDir: File): Uri {
val tmpFile = File.createTempFile("tmp_image_file_", ".jpg", cacheDir).apply {
deleteOnExit()
}
return FileProvider.getUriForFile(
context,
"${BuildConfig.APPLICATION_ID}.fileprovider",
tmpFile
)
}
我的
file_provider_paths.xml
长这样:
<paths>,
<external-files-path
name="app_images"
path="." />
<cache-path
name="cached_files"
path="." />
<files-path
name="images"
path="." />
</paths>
在我的清单中我有:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider_paths" />
</provider>
我在另外两个也使用相机的应用程序中使用完全相同的设置和代码。这些应用程序都使用相同的
minSdk
、gradle 版本和库 (33) 由于某种原因,此应用程序中的代码不起作用。这个应用程序比较复杂,里面定义了很多权限。我确实验证了相机权限不在合并的 xml 文件中,以防出现问题。
我尝试过各种 SO 解决方案,其中一些建议更改 xml 文件,这对我不起作用。这篇文章与我的问题最接近,但解决方案不起作用:Android: FileProvider.getUriForFile "Failed to find configured root"
提前感谢您的任何建议!
感谢您的快速回复。在为此浪费了各种时间之后,我看不出有任何问题,所以我最终使缓存无效并重新启动(重新启动还不够),瞧,它起作用了!天啊,谢谢 Android!