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:
- SecurityException con grantUriPermission al compartir un archivo con FileProvider
- Fotos de Google+ ACTION_VIEW, FLAG_GRANT_PERSISTABLE_URI_PERMISSION Excepción
- ¿Cómo compartir archivos desde cualquier ruta usando un FileProvider?
- ¿Cómo utilizar el soporte FileProvider para compartir contenido con otras aplicaciones?
- Compartir imágenes desde el almacenamiento interno mediante FileProvider
<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?
- FileProvider y almacenamiento externo secundario
- FileProvider no funciona con la cámara
- La intención de compartir imágenes funciona para Gmail pero bloquea FB y twitter
- FileProvider produce excepción en GetUriForFile
- Cómo abrir un archivo APK para todas las versiones de Android
- IllegalArgumentException: Error al encontrar la raíz de configuración que contiene xxx en FileProvider.getUriForFile
- Android FileProvider para ext sdcard
- PackageManager # installPackage no funciona para Android N
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'.
- Permiso de Android denegado automáticamente a peticiónPermission de MainActivity
- Los últimos servicios de Google Play 9.6.80 provocan "FirebaseCrash: Error al inicializar el informe de fallos"