Android 11 (niveau d'API 30) améliore encore la plate-forme en offrant une meilleure protection aux données des applications et des utilisateurs stockées sur un espace de stockage externe. Cette version introduit plusieurs améliorations, telles que l'accès au chemin d'accès brut des fichiers, les opérations de modification par lot pour les contenus multimédias et une interface utilisateur mise à jour pour le framework d'accès au stockage.
Cette version apporte également des améliorations à l'espace de stockage cloisonné, ce qui permet plus facilement aux développeurs de répondre à leurs cas d'utilisation du stockage après avoir migré vers ce modèle de stockage.
Application de l'espace de stockage cloisonné
Les applications qui s'exécutent sur Android 11, mais qui ciblent Android 10
(niveau d'API 29) peuvent toujours demander l'
requestLegacyExternalStorage
attribut. Cet indicateur permet aux applications de désactiver temporairement les
modifications associées
à l'espace de stockage cloisonné, comme l'octroi d'un accès à différents répertoires et
à différents types de fichiers multimédias. Une fois que vous avez mis à jour votre application pour qu'elle cible Android 11, le système ignore l'indicateur requestLegacyExternalStorage.
Maintenir la compatibilité avec Android 10
Si votre application désactive l'espace de stockage cloisonné lorsqu'elle s'exécute sur des appareils Android 10, nous vous recommandons de continuer à définir requestLegacyExternalStorage sur true dans le fichier manifeste de votre application. Ainsi, votre application pourra continuer à se comporter comme prévu sur les appareils équipés d'Android 10.
Migrer des données vers des répertoires visibles lors de l'utilisation de l'espace de stockage cloisonné
Si votre application utilise l'ancien modèle de stockage et ciblait auparavant Android 10 ou une version antérieure, vous pouvez stocker des données dans un répertoire auquel votre application ne peut pas accéder lorsque le modèle d'espace de stockage cloisonné est activé. Avant de cibler Android 11, migrez les données vers un répertoire compatible avec l'espace de stockage cloisonné.
Tester l'espace de stockage cloisonné
Pour activer l'espace de stockage cloisonné dans votre application, quels que soient la version du SDK cible et les valeurs de l'indicateur de fichier manifeste de votre application, activez les indicateurs de compatibilité d'application suivants :
DEFAULT_SCOPED_STORAGE(activé par défaut pour toutes les applications)FORCE_ENABLE_SCOPED_STORAGE(désactivé par défaut pour toutes les applications)
Pour désactiver l'espace de stockage cloisonné et utiliser l'ancien modèle de stockage, annulez la définition des deux indicateurs.
Gérer l'espace de stockage de l'appareil
À partir d'Android 11, les applications qui utilisent le modèle d'espace de stockage cloisonné ne peuvent accéder qu'à leurs propres fichiers de cache spécifiques à l'application. Si votre application doit gérer l'espace de stockage de l'appareil, suivez les instructions pour interroger l'espace libre.
- Vérifiez l'espace libre en appelant l'action d'intent
ACTION_MANAGE_STORAGE. Si l'espace libre sur l'appareil est insuffisant, demandez à l'utilisateur d'autoriser votre application à effacer tous les caches. Pour ce faire, appelez l'action d'intent
ACTION_CLEAR_APP_CACHE.
Répertoire spécifique à l'application sur un espace de stockage externe
À partir d'Android 11, les applications ne peuvent pas créer leur propre
répertoire sur l'espace de stockage externe. Pour
accéder au répertoire fourni par le système pour votre application, appelez
getExternalFilesDirs().
Accès aux fichiers multimédias
Pour faciliter l'accès aux contenus multimédias tout en préservant la confidentialité des utilisateurs, Android 11 ajoute les fonctionnalités suivantes.
Effectuer des opérations par lot
Pour assurer la cohérence entre les appareils et améliorer la commodité pour les utilisateurs, Android 11 ajoute plusieurs méthodes qui facilitent la gestion des groupes de fichiers multimédias.
Accéder aux fichiers à l'aide de chemins d'accès directs et de bibliothèques natives
Pour améliorer le fonctionnement de votre application avec des bibliothèques multimédias tierces,
Android 11 vous permet d'utiliser d'autres API que l'API
MediaStore pour accéder aux
fichiers multimédias d'un espace de stockage partagé à l'aide de chemins d'accès directs. Ces API incluent les suivantes :
- L'API
File. - Les bibliothèques natives, telles que
fopen().
Accès aux données d'autres applications
Pour protéger la confidentialité des utilisateurs, sur les appareils équipés d'Android 11 ou version ultérieure, le système limite davantage l'accès de votre application aux répertoires privés d'autres applications.
Accès aux répertoires de données sur la mémoire de stockage interne
Android 9 (niveau d'API 28) a commencé à limiter les applications qui pouvaient rendre les fichiers de leurs répertoires de données sur la mémoire de stockage interne accessibles au monde entier pour d'autres applications. Les applications qui ciblent Android 9 ou une version ultérieure ne peuvent pas rendre les fichiers de leurs répertoires de données accessibles au monde entier.
Android 11 étend cette restriction. Si votre application cible Android 11, elle ne peut pas accéder aux fichiers du répertoire de données d'une autre application, même si l'autre application cible Android 8.1 (niveau d'API 27) ou une version antérieure et a rendu les fichiers de son répertoire de données lisibles par le monde entier.
Accès aux répertoires spécifiques à l'application sur un espace de stockage externe
Sur Android 11, les applications ne peuvent plus accéder aux fichiers du répertoire dédié et spécifique à l'application d'aucune autre application dans l'espace de stockage externe.
Restrictions d'accès aux documents
Pour donner aux développeurs le temps de tester, les modifications suivantes liées au framework d'accès au stockage (SAF) ne prennent effet que si votre application cible Android 11 ou une version ultérieure.
Accès aux répertoires
Vous ne pouvez plus utiliser l'
ACTION_OPEN_DOCUMENT_TREE
action d'intent pour demander l'accès aux répertoires suivants :
- Répertoire racine du volume de stockage interne.
- Répertoire racine de chaque volume de carte SD que le fabricant de l'appareil considère comme fiable, que la carte soit émulée ou amovible. Un volume fiable est un volume auquel une application peut accéder sans problème la plupart du temps.
- Répertoire
Download.
Accès aux fichiers
Vous ne pouvez plus utiliser l'
ACTION_OPEN_DOCUMENT_TREE
ni l'
ACTION_OPEN_DOCUMENT
action d'intent pour demander à l'utilisateur de sélectionner des fichiers individuels dans les
répertoires suivants :
- Répertoire
Android/data/et tous ses sous-répertoires. - Répertoire
Android/obb/et tous ses sous-répertoires.
Tester la modification
Pour tester cette modification de comportement, procédez comme suit :
- Appelez un intent avec l'action
ACTION_OPEN_DOCUMENT. Vérifiez que les répertoiresAndroid/data/etAndroid/obb/n'apparaissent pas. - Effectuez l'une des opérations suivantes :
- Activez l'
RESTRICT_STORAGE_ACCESS_FRAMEWORKindicateur de compatibilité d'application. - Ciblez Android 11 ou une version ultérieure.
- Activez l'
- Appelez un intent avec l'action
ACTION_OPEN_DOCUMENT_TREE. Vérifiez que le répertoireDownloads'affiche et que le bouton d'action associé au répertoire est grisé.
Autorisations
Android 11 introduit les modifications suivantes concernant les autorisations de stockage.
Cibler n'importe quelle version
READ_EXTERNAL_STORAGE permission.Les modifications suivantes prennent effet dans Android 11, quelle que soit la version du SDK cible de votre application :
- L'autorisation d'exécution Stockage est renommée Fichiers et contenus multimédias.
Si votre application n'a pas désactivé l' espace de stockage cloisonné et demande l'
READ_EXTERNAL_STORAGEautorisation, les utilisateurs voient une boîte de dialogue différente de celle d'Android 10. La boîte de dialogue indique que votre application demande l'accès aux photos et aux contenus multimédias, comme illustré dans la figure 1.Les utilisateurs peuvent voir les applications qui disposent de l'autorisation
READ_EXTERNAL_STORAGEdans les paramètres système. Sur la page Paramètres > Confidentialité > Gestionnaire d'autorisations > Fichiers et contenus multimédias, chaque application disposant de l' autorisation est listée sous Autorisé pour tous les fichiers. Si votre application cible Android 11, n'oubliez pas que cet accès à "tous les fichiers" est en lecture seule. Pour lire et écrire dans tous les fichiers d' un espace de stockage partagé à l'aide de cette application, vous devez disposer de l'autorisation Accès à tous les fichiers.
Cibler Android 11
Si votre application cible Android 11, l'autorisation WRITE_EXTERNAL_STORAGE et l'autorisation privilégiée WRITE_MEDIA_STORAGE ne fournissent plus d'accès supplémentaire.
N'oubliez pas que, sur les appareils équipés d'Android 10 (niveau d'API 29) ou version ultérieure, votre application peut contribuer à des collections multimédias bien définies, telles que MediaStore.Downloads, sans demander d'autorisation liée au stockage. Découvrez
comment ne demander que les autorisations nécessaires
lorsque vous
utilisez des fichiers multimédias dans votre application.
Accès à tous les fichiers
La plupart des applications qui nécessitent un accès à un espace de stockage partagé peuvent suivre les bonnes pratiques pour le partage de fichiers multimédias et le partage de fichiers autres que multimédias. Cependant, pour certaines applications, le cas d'utilisation principal nécessite un accès étendu aux fichiers sur un appareil, sans pouvoir y accéder efficacement en suivant les bonnes pratiques de stockage respectueux de la confidentialité. Android fournit un accès spécial aux applications appelé Accès à tous les fichiers pour ces situations. Pour en savoir plus, consultez le guide sur la gestion de tous les fichiers sur un périphérique de stockage.
Ressources supplémentaires
Pour en savoir plus sur les modifications apportées au stockage dans Android 11, consultez les ressources suivantes :