Android: FileProvider IllegalArgumentException не удалось найти настроенный корень, который содержит / data/data/**/files/Videos / final.mp4
Я пытаюсь использовать FileProvider
для воспроизведения видео с частного пути.Лицом
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);
Манифест.в 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" />
какие-нибудь подсказки по этому поводу?
спасибо Нитц!--6-->
2 ответов
у вас есть свой name
и свой path
полистай. name
это то, что идет в Uri
и path
- относительное расположение в корне файловой системы.
пойти с:
<paths>
<files-path name="my_docs" path="Videos/" />
</paths>
у меня была такая же основная ситуация. Я все правильно определил (файлы-путь в xml), но есть еще одна вещь, которая приводит к тому же исключению. Я добавляю еще один ответ просто как дополнение и комментарий не будут хорошо читаемый.
Я создал / прочитал каталог, в котором я храню файлы, такие как:
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/файлы/документы / 6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.файлы DOCX
согласно документации Открыть каталог эти два метода должны быть эквивалентны, насколько я понимаю. Но это создает другой путь... Может быть, формулировка мне просто не понятна в документации, но для меня она написана неправильно.
getDir(название, режим)
создает новый каталог (или открывает существующий каталог) в вашем уникальный каталог файловой системы приложения. Этот новый каталог появляется внутри каталог, предоставляемый getFilesDir ().