Existe-t-il un simple appel d'API qui me dirait si une application fonctionnant sur Android 10 ou version ultérieure doit utiliser l'accès au stockage étendu, c'est-à-dire si l'accès normal aux fichiers, également appelé «stockage externe hérité» est désactivé? Notez que même si l'application dans AndroidManifest.xml, la section a déclaré:
android:requestLegacyExternalStorage="true"
l'accès au fichier peut toujours être refusé en raison de changements de politique de Google à l'avenir, donc tester cette valeur est inutile. La seule façon que j'ai trouvée est de tester si le répertoire racine du stockage externe est lisible, mais pour cela, l'application doit d'abord demander l'autorisation de stockage, qui est inutile pour toute autre chose, si le stockage hérité est désactivé.
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.
}
Je pense avoir déjà vu une nouvelle API pour détecter cela, mais je ne trouve plus cet article ...
la source
an app running on Android 10 or later must use Scoped Storage access
? Pouvez-vous expliquer ce que vous voulez dire par là? Quelles fonctions avez-vous en tête? Je sais que par exemple les volumes de stockage et le gestionnaire de stockage qui ont été apportés pour N sont déjà obsolètes pour Q.Réponses:
Vous pouvez utiliser ces deux méthodes à partir de
android.os.Environment
:isExternalStorageLegacy(File path)
isExternalStorageLegacy()
Si vous découvrez que vous avez accès au stockage hérité, personnellement, je pense qu'il est préférable de simplement migrer les données vers un stockage étendu et de les utiliser à la place car le stockage hérité peut cesser de fonctionner sans avertissement.
la source