Android 11 (niveau d'API 30) améliore encore la plate-forme, 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 au fichier brut, les opérations de modification par lot pour les contenus multimédias et une interface utilisateur mise à jour pour le Storage Access Framework.
Cette version offre également des améliorations au stockage avec portée, ce qui permet aux développeurs de répondre plus facilement à 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 exécutées sur Android 11, mais qui ciblent Android 10 (niveau d'API 29) peuvent toujours demander l'attribut requestLegacyExternalStorage
. Cet indicateur permet aux applications de refuser temporairement les modifications associées à l'espace de stockage cloisonné, par exemple en accordant l'accès à différents répertoires et différents types de fichiers multimédias. Une fois votre application mise à jour pour cibler 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. De cette façon, votre application peut continuer à se comporter comme prévu sur les appareils équipés d'Android 10.
Migrez les données vers les répertoires visibles lors de l'utilisation d'un espace de stockage cloisonné
Si votre application utilise l'ancien modèle de stockage et qu'elle ciblait auparavant Android 10 ou version antérieure, vous stockez peut-être des données dans un répertoire auquel votre application ne peut pas accéder lorsque le modèle 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, quelles que soient la version du SDK cible et les valeurs des indicateurs 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é pour toutes les applications par défaut)
Pour désactiver l'espace de stockage cloisonné et utiliser plutôt l'ancien modèle de stockage, supprimez les 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 disponible.
- Vérifiez l'espace disponible en appelant l'action d'intent
ACTION_MANAGE_STORAGE
. Si l'espace disponible sur l'appareil est insuffisant, invitez l'utilisateur à 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 plus créer leur propre répertoire spécifique à l'application sur le stockage externe. Pour accéder au répertoire que le système fournit 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 plus de cohérence entre les appareils et de 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 aux fichiers directs. Voici la liste de ces API:
- 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 pouvant rendre les fichiers de leurs répertoires de données sur le stockage interne accessibles à toutes les 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 dans le 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 cette 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 tous.
Accès aux répertoires spécifiques aux applications sur un espace de stockage externe
Sous Android 11, les applications ne peuvent plus accéder aux fichiers situés dans le répertoire dédié d'aucune autre application dans un espace de stockage externe.
Restrictions d'accès aux documents
Pour laisser aux développeurs le temps de tester, les modifications suivantes liées au Storage Access Framework (SAF) ne prennent effet que si votre application cible Android 11 ou version ultérieure.
Accès aux répertoires
Vous ne pouvez plus utiliser l'action d'intent ACTION_OPEN_DOCUMENT_TREE
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 d'intent ACTION_OPEN_DOCUMENT_TREE
ou ACTION_OPEN_DOCUMENT
pour demander à l'utilisateur de sélectionner des fichiers 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 ce changement 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'indicateur de compatibilité d'application
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - Ciblez Android 11 ou version ultérieure.
- Activez l'indicateur de compatibilité d'application
- Appelez un intent avec l'action
ACTION_OPEN_DOCUMENT_TREE
. Vérifiez que le répertoireDownload
s'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
Les modifications suivantes s'appliqueront à Android 11, quelle que soit la version du SDK cible de votre application:
- L'autorisation d'exécution Storage est renommée Fichiers et contenus multimédias.
Si votre application n'a pas désactivé l'espace de stockage cloisonné et demande l'autorisation
READ_EXTERNAL_STORAGE
, 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 quelles applications disposent de l'autorisation
READ_EXTERNAL_STORAGE
dans 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 répertoriée sous Autorisée pour tous les fichiers. Si votre application cible Android 11, gardez à l'esprit que cet accès à "tous les fichiers" est en lecture seule. Pour lire et écrire dans tous les fichiers de l'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 aucun 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'autorisations liées au stockage. Découvrez comment demander uniquement les autorisations nécessaires lorsque vous travaillez avec 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 appareil de stockage.
Ressources supplémentaires
Pour en savoir plus sur les modifications apportées au stockage sous Android 11, consultez les documents suivants: