Android: FileProvider en una carpeta de almacenamiento externo personalizada

Estoy intentando fijar un fileprovider para compartir el archivo. Mis archivos se guardan en una carpeta "AppName" en el almacenamiento externo (el mismo nivel que las carpetas Android, Películas e Imágenes).

Aquí está mi config de proveedor de archivos:

<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> 

Y los file_paths.xml:

 <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="mypath" path="AppName" /> </paths> 

Cuando intento acceder a mi archivo con:

 Uri fileUri = FileProvider.getUriForFile(activity, "com.mydomain.appname.fileprovider", new File("/storage/emulated/0/AppName/IMG_20160419_095211.jpg")); 

Devuelve un error: java.lang.IllegalArgumentException: Error al encontrar la raíz configurada que contiene /storage/emulated/0/AppName/IMG_20160419_095211.jpg en android.support.v4.content.FileProvider $ SimplePathStrategy.getUriForFile (FileProvider.java:678 ) En android.support.v4.content.FileProvider.getUriForFile (FileProvider.java:377)

Funcionó muy bien antes cuando yo estaba utilizando el directorio incorporado como imágenes o películas, mi file_paths.xml se define así:

 <external-path name="photos" path="Pictures" /> <external-path name="videos" path="Movies" /> 

Pero ahora quiero almacenar mi archivo en mi propia carpeta. ¿He extrañado algo con la configuración de FileProvider?

En primer lugar, sé que se trata de una antigua publicación, pero es la pregunta más cercana publicado que era similar a mi problema, así que voy a publicar mi solución.

La razón de este error se debe a que la ruta que está proporcionando en el archivo de proveedor es

  • A) Se deletrea incorrectamente y no existe en la external-path
  • B) Utilizar la ruta absoluta /storage/emulated/0

Devuelve Failed to find configured root that contains ... porque no puede encontrar esa carpeta. Asegúrese de escribir sólo el directorio que desea compartir y asegúrese de que está escrito correctamente. Recuerde que cuando declara external-path es el equivalente de llamar a Enviornment.getExternalStorageDirectory() Ya que escribe el nombre del directorio cuando crea su archivo, no necesita proporcionar una path de path en su archivo de proveedor como todo lo que hace Es la máscara de cualquier valor que esté en la ruta con el nombre.

Así que su ruta del proveedor sería: <external-path name="my_files" />

Y su código sería:

 File file = new File(new File(Environment.getExternalStorageDirectory(), "myfolder"), "file.ext"); Uri uri = FileProvider.getUriForFile(context, fileProvider, file); 

Tu ruta uri daría entonces el siguiente

content://fileprovider/my_files/myfolder/file.ext

Si usted había proporcionado una ruta en su archivo de proveedor, entonces su ruta de acceso de uri se vería así:

content://fileprovider/my_files/file.ext

Yo tuve lo mismo. En mi caso tuve que limpiar la compilación en Android Studio (Build> Clean Project) cada vez que modificaba la ruta del fileprovider en 'file_paths.xml'.

  • Error al encontrar la raíz configurada que contiene
  • Selección de un archivo de imagen de la Galería mediante FileProvider
  • Compartir imágenes almacenadas en caché utilizando FileProvider
  • Android: FileProvider IllegalArgumentException Error al encontrar la raíz configurada que contiene /data/data/**/files/Videos/final.mp4
  • Implementación de un selector de archivos en Android y copia del archivo seleccionado en otra ubicación
  • Error de FileProvider
  • ¿Por qué usar un FileProvider? No puedo abrir el archivo desde INTERNAL STORAGE con aplicaciones externas.
  • Proveedor de archivos de Android Illegal Argument Exception
  • Error de FileProvider en los dispositivos Huawei
  • ¿Cómo puede hacer un FileProvider disponible para otras aplicaciones?
  • EXCEPCIÓN FATAL: ThumbnailManager-1 mientras comparte imágenes con Intent
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.