Android FileProvider.getUriForFile 找不到已配置的 root

问题描述 投票:0回答:1

问题是当我打电话给

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 android-camera android-fileprovider
1个回答
0
投票

感谢您的快速回复。在为此浪费了各种时间之后,我看不出有任何问题,所以我最终使缓存无效并重新启动(重新启动还不够),瞧,它起作用了!天啊,谢谢 Android!

© www.soinside.com 2019 - 2024. All rights reserved.