¿Hay una simple llamada a la API que me diga si una aplicación que se ejecuta en Android 10 o posterior debe usar el acceso de Scoped Storage, es decir, si el acceso normal a los archivos, también conocido como "Legacy External Storage" está desactivado? Tenga en cuenta que incluso si la aplicación en AndroidManifest.xml, la sección declara:
android:requestLegacyExternalStorage="true"
el acceso al archivo aún puede denegarse debido a cambios en la política de Google en el futuro, por lo que probar este valor es inútil. La única forma que encontré es probar si el directorio raíz de almacenamiento externo es legible, pero para eso, la aplicación primero debe solicitar permiso de almacenamiento, que es inútil para cualquier otra cosa, si el almacenamiento heredado está deshabilitado.
public static boolean mustUseScopedStorage() {
// Impractical must first ask for useless Storage permission...
File exSD = Environment.getExternalStorageDirectory();
return !exSD.canRead(); // this test works only if Storage permission was granted.
}
Creo que una vez vi una nueva API para detectar esto, pero ya no puedo encontrar ese artículo ...
fuente
an app running on Android 10 or later must use Scoped Storage access
? ¿Puedes explicar a qué te refieres con eso? ¿Qué funciones tienes en mente? Sé que, por ejemplo, Storage Volumes y Storage Manager que se trajeron para N ya están en desuso para Q.Respuestas:
Puede usar estos dos métodos desde
android.os.Environment
:isExternalStorageLegacy(File path)
isExternalStorageLegacy()
En caso de que descubra que tiene acceso al almacenamiento heredado, personalmente creo que es mejor simplemente migrar los datos al almacenamiento con alcance y usarlos, ya que el almacenamiento heredado puede dejar de funcionar sin previo aviso.
fuente