因此,我正在开发一个应用程序,在其中我拍照并尝试将其保存到应用程序的内部存储中。我在使用fileprovider时遇到问题。我已经看过许多关于堆栈溢出的问题,但是如果可能的话,我想获得更详细的解释。

我也按照谷歌的例子,它给了我以下错误。 https://developer.android.com/training/camera/photobasics

Failed to find configured root that contains /storage/emulated/0/Android/data/com.myapp.debug/files/Pictures/JPEG_20180427_095752_2090822261.jpg


这是我遵循Google的示例时所拥有的代码。

<provider
        android:name=".application.blinkupregistration.postworkphotos.PostWorkPhotosFileProvider"
        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>


在我的代码中。

Uri photoURI = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", photoFile);


对于上述两个,我还尝试将com.myapp.provider硬编码到授权机构和getUriForFile方法中。还对getUriForFile方法使用了getpackageName()。但是这些并没有太大变化。我认为主要问题是路径。

使用Google的示例尝试了以下路径,

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="post_work_photos" path="Android/data/${applicationId}/files/Pictures" />
</paths>


<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="post_work_photos" path="Android/data/com.myapp/files/Pictures" />
</paths>


每当我将path.xml更改为以下代码时,我都可以使用它。

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="post_work_photos" path="." />
</paths>


但我不明白为什么它会与时期配合使用。我也不知道这是否正确,这是我主要关心的问题。

如果有人可以帮助我,那将很棒。谢谢。

最佳答案

使用Google的示例尝试了以下路径,


他们的例子...有问题。


  但我不明白为什么它会与时期配合使用。


因为您是说您愿意支持外部存储根目录中的任何内容。


  我也不知道这是否正确


您可以使用<external-files-path>来缩小范围:

<external-files-path name="post_work_photos" path="." />


现在,您只提供getExternalFilesDir()之外的文件,这是文件所指向的位置。

10-07 19:47