¿Cómo cambia el acceso al almacenamiento en Android 6?

Antecedentes

Android tuvo muchos cambios en cuanto a cómo manejar la tarjeta SD y el almacenamiento en general:

API 3: obtienes acceso completo, no necesitas permisoAPI 4-15: debe usar WRITE_EXTERNAL_STORAGE y obtendrá acceso completo.API 16-18: si solo desea leer, use READ_EXTERNAL_STORAGEAPI 19-20: no puede leer ni escribir en el almacenamiento externo secundario (tarjeta SD), a menos que su aplicación sea una aplicación del sistema o tenga una raíz.API 21-22: para acceder a la tarjeta SD, debe pedirle permiso al usuario y usar la API DocumentFile en lugar de la API File. Esto generó muchas preguntas, como he escrito sobreaquí, aquí yaquí.

Comenzando con API 23 (Android 6), las cosas parecen cambiar una vez más ...

El problema

Para API 23, hay al menos 2 cosas que son nuevas y están relacionadas con el almacenamiento:

"Dispositivos de almacenamiento adoptables"- El usuario puede hacer opcionalmente la tarjeta SD como algo parecido al almacenamiento externo primario.Como parte de lanuevo mecanismo de permisos (solicitando permisos en tiempo de ejecución), parece que el almacenamiento también es un permiso que el usuario debe confirmar. Esto es para READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE

Dado que no hay ningún dispositivo Android 6 que tenga una tarjeta SD, y debido a que el emulador en sí no tiene la capacidad de usar una tarjeta SD, aún es imposible saber qué está pasando.

Las preguntas

¿Obtendrá acceso la tarjeta SD utilizando la API de archivo en lugar de DocumentFile?

Si deseo acceder a todas las rutas de almacenamiento externo (incluida la tarjeta SD), ¿significa que necesito solicitar estos permisos dos veces: uno para el almacenamiento externo primario y otro para la tarjeta SD?

¿Se puede acceder a los archivos de la tarjeta SD antes del otorgamiento manual del permiso?

Supongamos que el usuario ha elegido usar "Dispositivos de almacenamiento adoptables", ¿qué significa para las diversas funciones que recuperan las rutas de los archivos de la aplicación? Por ejemplo: getFilesDir, getExternalFilesDir, ...? ¿Cambiaría el orden de getExternalFilesDirs por eso?

¿Qué sucede con los archivos de la aplicación cuando el usuario mueve la aplicación desde / hacia la tarjeta SD (usando los "Dispositivos de almacenamiento adoptables")? ¿Qué pasa con los archivos de la aplicación en la tarjeta SD? ¿Se quedarían? ¿O se mudarían a alguna parte?

Por ejemplo, si la aplicación tiene "file1.txt" en la tarjeta SD, en la ruta "/ storage / extSdCard / Android / data / appPackageName", y tiene un archivo "file2.txt" (o incluso el mismo nombre) en el almacenamiento externo primario en la ruta "/ storage / emulated / 0 / Android / data / appPackageName". Después de cambiar, ¿qué pasaría con esos archivos? ¿Cómo se fusionarían en una sola carpeta, si es que lo hacen?

Al mover la aplicación a la tarjeta SD (usando "Dispositivos de almacenamiento adoptables"), ¿significa que no se usará almacenamiento interno?

Respuestas a la pregunta(2)

Su respuesta a la pregunta