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>