android - IllegalArgumentException:无法在 FileProvider.getUriForFile 上找到包含 xxx 的配置根目录

标签 android filepath illegalargumentexception android-fileprovider

我一直在尝试关注 Android tutorial关于共享文件。 我这样设置 FileProvider:

在主 list xml 上:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.example.mysecondapp.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true" >
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>

res/xml/filpaths.xml 文件:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="myexternalimages" path="SpCars_album/" />
</paths>

在我的代码中,我正在尝试以下操作:

File requestFile = new File(mImageFilenames[position]);
                try {
                    fileUri = FileProvider.getUriForFile(
                            SeventhActivity.this,
                            "com.example.mysecondapp.fileprovider",
                            requestFile);
                } catch (IllegalArgumentException e) {
                    Log.e("File Selector",
                            "The selected file can't be shared: " +
                                    mImageFilenames[position]);
                }

requestFile 使用文件的正确工作路径进行实例化。 该文件的路径完全以 getExternalFilesDir(Environment.DIRECTORY_PICTURES) 返回的内容开头。 我只是不明白是什么引发了错误,因为一切似乎都合适。 提前致谢。

最佳答案

The path of that file begins exactly with what getExternalFilesDir(Environment.DIRECTORY_PICTURES) returns.

AFAIK,这不会给你一个名为 SpCars_album/ 的目录.

I just cant understand what raises the error because everything seems to fit.

您提供的文件不是 FileProvider 可以提供的文件。从你定义的根源。


更新

我忘了这与 a documentation bug on FileProvider 相关联. FileProvider<external-path> 提供来自 getExternalFilesDir() 的文件吗? ,而是来自 Environment.getExternalStorageDirectory() .我创建了 a StreamProvider subclass that offers support for getExternalFilesDir() .

如果你使用我的 StreamProvider , 替换您的 <external-path><external-files-path name="myexternalimages" path="Pictures/SpCars_album/" /> ,你应该有更好的运气。

关于android - IllegalArgumentException:无法在 FileProvider.getUriForFile 上找到包含 xxx 的配置根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455035/

相关文章:

java - 找不到符号导入 com.user.userCom

android - WakefulBroadcastReceiver 是否需要 IntentService 才能保持唤醒锁?

c# - 计算相对文件路径

android可从文件路径绘制

java - 我正在尝试使用 Java 重命名文件,但由于某种原因它不起作用

android - 问题实现 9 个旧的 Androids Flakes

java - NPE 和 IAE 是否有不同处理方式的情况?

android - 运行 Multidexed Espresso .APK

java - 参数类型不匹配: IllegalArgumentException on simple case

java - OnClickListener 的问题