Antecedentes
En Android 4.4 (KitKat), Google ha restringido bastante el acceso a la tarjeta SD.
A partir de Android Lollipop (5.0), los desarrolladores pueden usar una nueva API que le pide al usuario que confirme para permitir el acceso a carpetas específicas, como está escrito en esta publicación de Grupos de Google .
El problema
La publicación le dirige a visitar dos sitios web:
Esto parece un ejemplo interno (tal vez se muestre en las demostraciones de API más adelante), pero es bastante difícil entender qué está pasando.
Esta es la documentación oficial de la nueva API, pero no brinda suficientes detalles sobre cómo usarla.
Esto es lo que te dice:
Si realmente necesita acceso completo a un subárbol completo de documentos, comience iniciando ACTION_OPEN_DOCUMENT_TREE para permitir que el usuario elija un directorio. Luego, pase el getData () resultante a fromTreeUri (Contexto, Uri) para comenzar a trabajar con el árbol seleccionado por el usuario.
Mientras navega por el árbol de instancias de DocumentFile, siempre puede usar getUri () para obtener el Uri que representa el documento subyacente para ese objeto, para usar con openInputStream (Uri), etc.
Para simplificar su código en dispositivos que ejecutan KITKAT o una versión anterior, puede usar fromFile (Archivo) que emula el comportamiento de un DocumentsProvider.
Las preguntas
Tengo algunas preguntas sobre la nueva API:
- ¿Cómo lo usas realmente?
- Según la publicación, el sistema operativo recordará que la aplicación recibió un permiso para acceder a los archivos / carpetas. ¿Cómo verifica si puede acceder a los archivos / carpetas? ¿Existe una función que me devuelva la lista de archivos / carpetas a los que puedo acceder?
- ¿Cómo maneja este problema en Kitkat? ¿Es parte de la biblioteca de soporte?
- ¿Hay una pantalla de configuración en el sistema operativo que muestre qué aplicaciones tienen acceso a qué archivos / carpetas?
- ¿Qué sucede si se instala una aplicación para varios usuarios en el mismo dispositivo?
- ¿Existe alguna otra documentación / tutorial sobre esta nueva API?
- ¿Se pueden revocar los permisos? Si es así, ¿se está enviando una intención a la aplicación?
- ¿Pedir el permiso funcionaría de forma recursiva en una carpeta seleccionada?
- ¿El uso del permiso también permitiría dar al usuario la posibilidad de realizar una selección múltiple por elección del usuario? ¿O la aplicación necesita indicar específicamente a la intención qué archivos / carpetas permitir?
- ¿Hay alguna forma en el emulador de probar la nueva API? Quiero decir, tiene una partición de tarjeta SD, pero funciona como el almacenamiento externo principal, por lo que ya se otorga todo el acceso (con un simple permiso).
- ¿Qué sucede cuando el usuario reemplaza la tarjeta SD por otra?