Android: FileProvider IllegalArgumentException 无法找到包含 /data/data/**/files/Videos/final.mp4 的已配置根目录
Android: FileProvider IllegalArgumentException Failed to find configured root that contains /data/data/**/files/Videos/final.mp4
我正在尝试使用 FileProvider
播放私人视频 path.Facing
java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/XXXXX(Package)/files/Videos/final.mp4
代码:
<paths>
<files-path path="my_docs" name="Videos/" />
</paths>
Java代码:
File imagePath = new File(getFilesDir(), "Videos");
File newFile = new File(imagePath, "final.mp4");
Log.d(TAG, "-------------newFile:"+newFile.exists());//True here
//Exception in below line
Uri contentUri = FileProvider.getUriForFile(this,"com.wow.fileprovider", newFile);
Manifest.xml
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.wow.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
有什么线索吗?
谢谢
尼兹
你的 name
和 path
颠倒了。 name
是 Uri
中的内容,path
是文件系统根目录中的相对位置。
选择:
<paths>
<files-path name="my_docs" path="Videos/" />
</paths>
我的基本情况完全一样。我正确地定义了所有内容(xml 中的文件路径)但是还有一件事导致了同样的异常。我添加另一个答案只是作为补充,评论可读性不好。
我 created/read 我存储文件的目录,如:
context.getDir("Documents", Context.MODE_PRIVATE)
这导致路径如下:
/data/user/0/ch.myapp/app_Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx
然后我将创建目录更改为:
File directory = new File(context.getFilesDir(), "Documents");
if (!directory.exists()) {
directory.mkdir();
}
这导致路径如下:
/data/user/0/ch.myapp/files/Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx
根据文档 Open a directory,据我所知,这两种方法应该是等效的。但它创建了一条不同的路径......也许文档中的公式对我来说不清楚,但对我来说它写错了。
getDir(name, mode)
Creates a new directory (or opens an existing directory) within your
app's unique file system directory. This new directory appears inside
the directory provided by getFilesDir().
将您的提供商 XML 更改为此。
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="external_files" path="." />
<root-path name="external_files" path="/storage/" />
</paths>
我正在尝试使用 FileProvider
播放私人视频 path.Facing
java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/XXXXX(Package)/files/Videos/final.mp4
代码:
<paths>
<files-path path="my_docs" name="Videos/" />
</paths>
Java代码:
File imagePath = new File(getFilesDir(), "Videos");
File newFile = new File(imagePath, "final.mp4");
Log.d(TAG, "-------------newFile:"+newFile.exists());//True here
//Exception in below line
Uri contentUri = FileProvider.getUriForFile(this,"com.wow.fileprovider", newFile);
Manifest.xml
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.wow.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
有什么线索吗?
谢谢 尼兹
你的 name
和 path
颠倒了。 name
是 Uri
中的内容,path
是文件系统根目录中的相对位置。
选择:
<paths>
<files-path name="my_docs" path="Videos/" />
</paths>
我的基本情况完全一样。我正确地定义了所有内容(xml 中的文件路径)但是还有一件事导致了同样的异常。我添加另一个答案只是作为补充,评论可读性不好。
我 created/read 我存储文件的目录,如:
context.getDir("Documents", Context.MODE_PRIVATE)
这导致路径如下:
/data/user/0/ch.myapp/app_Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx
然后我将创建目录更改为:
File directory = new File(context.getFilesDir(), "Documents");
if (!directory.exists()) {
directory.mkdir();
}
这导致路径如下:
/data/user/0/ch.myapp/files/Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx
根据文档 Open a directory,据我所知,这两种方法应该是等效的。但它创建了一条不同的路径......也许文档中的公式对我来说不清楚,但对我来说它写错了。
getDir(name, mode)
Creates a new directory (or opens an existing directory) within your app's unique file system directory. This new directory appears inside the directory provided by getFilesDir().
将您的提供商 XML 更改为此。
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="external_files" path="." />
<root-path name="external_files" path="/storage/" />
</paths>