Mises à jour du stockage sous Android 11

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:

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.

  1. Vérifiez l'espace disponible en appelant l'action d'intent ACTION_MANAGE_STORAGE.
  2. 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:

  1. Appelez un intent avec l'action ACTION_OPEN_DOCUMENT. Vérifiez que les répertoires Android/data/ et Android/obb/ n'apparaissent pas.
  2. Effectuez l'une des opérations suivantes :
  3. Appelez un intent avec l'action ACTION_OPEN_DOCUMENT_TREE. Vérifiez que le répertoire Download 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

La première boîte de dialogue présente un lien intitulé "Autoriser dans les paramètres".
Figure 1. Boîte de dialogue affichée lorsqu'une application utilise un espace de stockage cloisonné et demande l'autorisation READ_EXTERNAL_STORAGE.

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:

Articles de blog

Vidéos