bud*_*dgw 15 android android-fileprovider
我正在尝试为共享文件设置fileprovider.我的文件保存在外部存储器中的"AppName"文件夹中(与Android,Movies和Pictures文件夹相同).
这是我的文件提供程序配置:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.mydomain.appname.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
Run Code Online (Sandbox Code Playgroud)
和file_paths.xml:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="mypath" path="AppName" />
</paths>
Run Code Online (Sandbox Code Playgroud)
当我尝试访问我的文件时:
Uri fileUri = FileProvider.getUriForFile(activity, "com.mydomain.appname.fileprovider",
new File("/storage/emulated/0/AppName/IMG_20160419_095211.jpg"));
Run Code Online (Sandbox Code Playgroud)
它返回一个错误:java.lang.IllegalArgumentException:无法在android.support.v4.content.FileProvider $ SimplePathStrategy.getUriForFile(FileProvider.java:678)中找到包含/storage/emulated/0/AppName/IMG_20160419_095211.jpg的已配置根目录)在android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:377)
它在我使用像图片或电影这样的内置目录之前工作正常,我的file_paths.xml定义如下:
<external-path name="photos" path="Pictures" />
<external-path name="videos" path="Movies" />
Run Code Online (Sandbox Code Playgroud)
但现在我想将我的文件存储在我自己的文件夹中.我是否错过了使用FileProvider配置的东西?
Aol*_*phn 17
Run Code Online (Sandbox Code Playgroud)<files-path name="name" path="path" />表示应用程序内部存储区域的files /子目录中的文件.此子目录与Context.getFilesDir()返回的值相同.
Run Code Online (Sandbox Code Playgroud)<external-path name="name" path="path" />表示外部存储区域根目录中的文件.此子目录的根路径与Environment.getExternalStorageDirectory()返回的值相同.
Run Code Online (Sandbox Code Playgroud)<external-files-path name="name" path="path" />表示应用程序外部存储区域根目录中的文件.此子目录的根路径与Context#getExternalFilesDir(String)Context.getExternalFilesDir(null)返回的值相同.
有关更多详细信息,请查看Android的FileProvider文档.一些配置如下图,com.view.asim.enterprise是我的包名.

首先,我知道这是一个旧帖子,但它是最接近的问题,与我的问题类似,所以我会发布我的解决方案.
出现此错误的原因是您在提供程序文件中提供的路径是
external-path/storage/emulated/0绝对路径它返回,Failed to find configured root that contains ...因为它找不到该文件夹.因此,请确保只编写要共享的目录,并确保其拼写正确.请记住,当您声明external-path它是调用的equivelant Enviornment.getExternalStorageDirectory()因为您在创建文件时编写目录的名称,所以您不需要在提供path程序文件中提供,因为它所做的就是屏蔽路径中的任何值.名字.
所以你的提供者路径是:
<external-path name="my_files" />
你的代码是:
File file = new File(new File(Environment.getExternalStorageDirectory(), "myfolder"), "file.ext");
Uri uri = FileProvider.getUriForFile(context, fileProvider, file);
Run Code Online (Sandbox Code Playgroud)
您的uri路径将产生以下结果
content://fileprovider/my_files/myfolder/file.ext
如果您在提供程序文件中提供了路径,那么您的uri路径将如下所示:
content://fileprovider/my_files/file.ext
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external_files"
path="." />
<external-files-path
name="external_files"
path="." />
<!-- FOR SD CARD-->
<root-path
name="sdcard1"
path="." />
</paths>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22247 次 |
| 最近记录: |