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

Android 11 (niveau d'API 30) améliore encore la plate-forme en protégeant mieux les 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 de modification par lot pour les médias et une mise à jour de l'interface utilisateur pour Storage Access Framework.

Cette version apporte également des améliorations à l'espace de stockage cloisonné, ce qui permet aux développeurs de traiter plus facilement leurs cas d'utilisation de l'espace de 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'attribut requestLegacyExternalStorage. Cet indicateur permet aux applications de désactiver 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 que vous avez mis à jour votre application pour cibler Android 11, le système ignore l'indicateur requestLegacyExternalStorage.

Assurer la compatibilité avec Android 10

Si votre application désactive l'espace de stockage cloisonné lorsqu'elle est exécutée 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 peut 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 Android 10 ou une version antérieure, il se peut que vous stockiez des données dans un répertoire auquel elle n'a pas accès lorsque le modèle d'espace de stockage cloisonné est activé. Avant de cibler Android 11, migrez des 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, activez les indicateurs de compatibilité d'application suivants:

Pour désactiver l'espace de stockage cloisonné et utiliser l'ancien modèle de stockage, désactivez 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 savoir comment 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 à vider tous les caches. Pour ce faire, appelez l'action d'intent ACTION_CLEAR_APP_CACHE.

Répertoire spécifique à l'application sur le stockage externe

À partir d'Android 11, les applications ne peuvent pas créer leur propre répertoire spécifique 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 plus 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. 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 dans la mémoire de stockage interne

Android 9 (niveau d'API 28) a commencé à limiter les applications autorisées à 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 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 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 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 d'aucune autre application dans le répertoire dédié d'un espace de stockage externe.

Restrictions d'accès aux documents

Afin de laisser aux développeurs le temps d'effectuer les tests, les modifications suivantes liées à Storage Access Framework (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 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 le changement

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 qui lui est associé est grisé.

Autorisations

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

Cibler n'importe quelle version

La première boîte de dialogue affiche un lien "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 prendront 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 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 Settings > Privacy > Permission Manager > Files and media (Paramètres > Confidentialité > Gestionnaire d'autorisations > Fichiers et contenus multimédias), chaque application disposant de l'autorisation est répertoriée sous Allowed for all files (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 tous les fichiers de l'espace de stockage partagé avec 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'autorisations liées au stockage. Découvrez comment demander uniquement 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:

Articles de blog

Vidéos