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:
- Implementación de un selector de archivos en Android y copia del archivo seleccionado en otra ubicación
- Compartir fotos con Android con FileProvider
- PackageManager # installPackage no funciona para Android N
- Fotos de Google+ ACTION_VIEW, FLAG_GRANT_PERSISTABLE_URI_PERMISSION Excepción
- Android - proveedor de archivos - permiso de denegación
<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?
- Selección de un archivo de imagen de la Galería mediante FileProvider
- Compartir imágenes desde el almacenamiento interno mediante FileProvider
- EXCEPCIÓN FATAL: ThumbnailManager-1 mientras comparte imágenes con Intent
- Uso del URI de contenido con ACTION_VIDEO_CAPTURE
- Proveedor de archivos de Android Illegal Argument Exception
- ¿Cómo compartir archivos desde cualquier ruta usando un FileProvider?
- IllegalArgumentException: Error al encontrar la raíz de configuración que contiene xxx en FileProvider.getUriForFile
- ¿Cómo utilizar el soporte FileProvider para compartir contenido con otras aplicaciones?
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"