IllegalArgumentException:无法在FileProvider.getUriForFile上找到包含xxx的配置根目录 [英] IllegalArgumentException: Failed to find configuration root that contains xxx on FileProvider.getUriForFile

查看:137
本文介绍了IllegalArgumentException:无法在FileProvider.getUriForFile上找到包含xxx的配置根目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试关于共享文件的 Android教程. 我这样设置FileProvider:

I have been trying to follow the Android tutorial on sharing files. I set up the FileProvider like this:

在主清单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文件:

the res/xml/filpaths.xml file:

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

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

And in my code I am trying the following:

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 requestFile is instantiated with a proper working path for a file. The path of that file begins exactly with what getExternalFilesDir(Environment.DIRECTORY_PICTURES) returns. I just cant understand what raises the error because everything seems to fit. Thanks in advance.

推荐答案

该文件的路径完全以getExternalFilesDir(Environment.DIRECTORY_PICTURES)返回的内容开头.

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

AFAIK,不会为您提供名为SpCars_album/的目录.

AFAIK, that will not give you a directory named SpCars_album/.

我只是不明白是什么引起了错误,因为一切似乎都合适.

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

您提供的文件不是FileProvider可以从已定义的根目录提供的文件.

The file you supplied is not one that can be served by the FileProvider from your defined roots.

更新

我忘记了这与 FileProvider 上的文档错误有关. FileProvider<external-path>不会提供getExternalFilesDir()中的文件,而不是Environment.getExternalStorageDirectory()中的文件.我创建了一个StreamProvider子类,该子类提供对getExternalFilesDir() 的支持.

I forgot that this is tied to a documentation bug on FileProvider. FileProvider and <external-path> does NOT serve files from getExternalFilesDir(), but instead from Environment.getExternalStorageDirectory(). I created a StreamProvider subclass that offers support for getExternalFilesDir().

如果您使用我的StreamProvider,将<external-path>替换为<external-files-path name="myexternalimages" path="Pictures/SpCars_album/" />,那么您的运气会更好.

If you use my StreamProvider, replacing your <external-path> with <external-files-path name="myexternalimages" path="Pictures/SpCars_album/" />, you should have better luck.

这篇关于IllegalArgumentException:无法在FileProvider.getUriForFile上找到包含xxx的配置根目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆