unresolved support permission paths geturiforfile generic fileprovider content authorities android android-fileprovider

support - Android: FileProvider IllegalArgumentException Error al encontrar la raíz configurada que contiene/data/data/**/files/Videos/final.mp4



import file provider android (2)

Tenía la misma situación básica. Definí todo correctamente (files-path en xml) pero hay una cosa más que conduce a la misma excepción. Agrego otra respuesta solo como una adición y un comentario no sería bien legible.

Creé / leí el directorio donde guardo los archivos como:

context.getDir("Documents", Context.MODE_PRIVATE)

Esto lleva a un camino como:

/data/user/0/ch.myapp/app_Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx

Luego cambié de crear el directorio a:

File directory = new File(context.getFilesDir(), "Documents"); if (!directory.exists()) { directory.mkdir(); }

Esto lleva a un camino como:

/data/user/0/ch.myapp/files/Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx

Según la documentación Abrir un directorio, los dos métodos deberían ser equivalentes por lo que yo entiendo. Pero crea un camino diferente ... Tal vez la formulación no está clara para mí en la documentación, pero para mí está mal escrita.

getDir (nombre, modo)

Crea un nuevo directorio (o abre un directorio existente) dentro del directorio único del sistema de archivos de su aplicación. Este nuevo directorio aparece dentro del directorio provisto por getFilesDir ().

FileProvider usar FileProvider para reproducir un video de una ruta privada.

java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/XXXXX(Package)/files/Videos/final.mp4

Código:

<paths> <files-path path="my_docs" name="Videos/" /> </paths>

Código 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" />

Alguna pista sobre esto?

Gracias Nitz


Tienes tu name y tu path cambiado. name es lo que entra en el Uri , y path es la ubicación relativa dentro de la raíz en el sistema de archivos.

Ir con:

<paths> <files-path name="my_docs" path="Videos/" /> </paths>