Mise à jour de l'espace de stockage sous Android 11

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 présente plusieurs améliorations, telles que l'accès au chemin d'accès aux fichiers bruts, les opérations d'édition par lot pour les contenus multimédias et une interface utilisateur mise à jour pour le framework d'accès au stockage.

Cette version améliore également l'espace de stockage cloisonné, ce qui permet aux développeurs de traiter 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 qui s'exécutent sur Android 11, mais 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 ciblait Android 10 ou une version antérieure précédemment, il se peut que vous stockiez 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, 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 l'ancien modèle de stockage à la place, annulez les deux options.

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 de l'espace libre.

  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 à vider tous les caches. Pour ce faire, appelez l'action d'intent ACTION_CLEAR_APP_CACHE.

Répertoire spécifique à l'application sur la mémoire de stockage externe

À partir d'Android 11, les applications ne peuvent pas créer leur propre répertoire spécifique à l'application sur un 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 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 des API autres 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 éléments suivants:

  • 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, le système limite davantage l'accès de votre application aux répertoires privés d'autres applications sur les appareils équipés d'Android 11 ou version ultérieure.

Accès aux répertoires de données dans 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 la mémoire de stockage interne accessibles à tous les utilisateurs à 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 dans le monde entier.

Android 11 renforce 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 de n'importe quelle autre application dédiée et spécifique à l'application dans le stockage externe.

Restrictions d'accès aux documents

Afin de laisser aux développeurs le temps de réaliser des tests, les modifications suivantes liées à 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 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 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 apparaît et que le bouton d'action qui lui est associé est grisé.

Autorisations

Android 11 introduit les modifications suivantes liées aux autorisations de stockage.

Cibler n'importe quelle version

La première boîte de dialogue contient un lien appelé "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 Stockage est renommée Fichiers et mé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, n'oubliez pas 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 périphérique 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