Gérer tous les fichiers d'un périphérique de stockage

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, certaines applications ont un cas d'utilisation principal qui nécessite un accès étendu aux fichiers sur un appareil, mais ne peuvent pas 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.

Par exemple, le cas d'utilisation principal d'une application antivirus peut nécessiter une analyse régulière de nombreux fichiers issus de différents répertoires. Si cette analyse nécessite de nombreuses interactions avec l'utilisateur pour sélectionner des répertoires à l'aide de l'outil de sélection de fichiers système, cela nuit à l'expérience utilisateur. D'autres cas d'utilisation, tels que les applications de gestionnaire de fichiers, de sauvegarde et de restauration, ainsi que de gestion de documents, impliquent des considérations similaires.

Demander l'accès à tous les fichiers

Une application peut demander à l'utilisateur l'accès à tous les fichiers en procédant comme suit :

  1. Déclarez l'autorisation MANAGE_EXTERNAL_STORAGE dans le fichier manifeste.
  2. L'action d'intent ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION permet de rediriger les utilisateurs vers une page de paramètres système sur laquelle ils peuvent activer l'option suivante pour votre application : Autoriser l'accès pour gérer tous les fichiers.

Pour déterminer si votre application dispose de l'autorisation MANAGE_EXTERNAL_STORAGE, appelez Environment.isExternalStorageManager().

Opérations autorisées par MANAGE_EXTERNAL_STORAGE

L'autorisation MANAGE_EXTERNAL_STORAGE accorde les autorisations suivantes :

  • Accès en lecture/écriture à tous les fichiers d'un espace de stockage partagé.

  • Accès au contenu de la table MediaStore.Files.

  • Accès au répertoire racine du lecteur USB on-the-go (OTG) et de la carte SD.

  • Accès en écriture à tous les répertoires de stockage interne, à l'exception de /Android/data/, de /sdcard/Android et de la plupart des sous-répertoires de /sdcard/Android. Cet accès en écriture inclut un accès au chemin d'accès direct aux fichiers.

    Les applications disposant de cette autorisation ne peuvent néanmoins pas accéder aux répertoires appartenant à d'autres applications, car ces répertoires apparaissent en tant que sous-répertoires de Android/data/ sur un volume de stockage.

Lorsqu'une application dispose de l'autorisation MANAGE_EXTERNAL_STORAGE, elle peut accéder à ces fichiers et répertoires supplémentaires à l'aide de l'API MediaStore ou des chemins d'accès aux fichiers directs Toutefois, lorsque vous utilisez le framework d'accès au stockage, vous ne pouvez accéder à un fichier ou à un répertoire que si vous pouvez le faire sans disposer de l'autorisation MANAGE_EXTERNAL_STORAGE.

Appeler l'activité de gestion du stockage d'une autre application

Sous Android 12 (niveau d'API 31) ou version ultérieure, les applications disposant à la fois de l'autorisation MANAGE_EXTERNAL_STORAGE et de l'autorisation QUERY_ALL_PACKAGES (ex. : applications de gestion de fichiers) peuvent utiliser le getManageSpaceActivityIntent() pour rediriger les utilisateurs vers l'activité de gestion de l'espace personnalisée d'une autre application.

La méthode getManageSpaceActivityIntent() utilise un nom de package et un code de requête, et renvoie l'un des éléments suivants :

  • Un PendingIntent, si l'application portant le nom de package spécifié a défini une activité personnalisée "Gérer l'espace". L'application de gestion de fichiers qui a appelé la méthode getManageSpaceActivityIntent() peut ensuite appeler l'intent affiché pour rediriger les utilisateurs vers l'activité personnalisée.
  • null, si l'application avec le nom de package spécifié ne définit pas d'activité de "gestion de l'espace".

Activer MANAGE_EXTERNAL_STORAGE pour les tests

Pour découvrir l'impact de l'autorisation MANAGE_EXTERNAL_STORAGE sur votre application, vous pouvez l'activer à des fins de test. Pour ce faire, exécutez la commande suivante sur la machine connectée à votre appareil de test :

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

Avis Google Play

Cette section fournit des informations aux développeurs qui publient des applications sur Google Play.

Pour limiter l'accès étendu à l'espace de stockage partagé, le Google Play Store a mis à jour ses règles afin d'évaluer les applications qui ciblent Android 11 (niveau d'API 30) ou une version ultérieure et qui demandent l'accès à tous les fichiers via l'autorisation MANAGE_EXTERNAL_STORAGE. Ces règles sont en vigueur depuis mai 2021.

Lorsque votre application cible Android 11 ou une version ultérieure et qu'elle déclare l'autorisation MANAGE_EXTERNAL_STORAGE, Android Studio affiche l'avertissement d'analyse lint qui apparaît dans la figure 1. Cet avertissement vous rappelle que le Google Play Store impose des règles qui limitent l'utilisation de cette autorisation.

Figure 1 : Avertissement d'analyse lint dans Android Studio qui rappelle aux développeurs les règles Google Play concernant l'autorisation MANAGE_EXTERNAL_STORAGE

Vous devez demander l'autorisation MANAGE_EXTERNAL_STORAGE uniquement lorsque votre application ne peut pas utiliser efficacement des API plus respectueuses de la confidentialité, telles que le framework d'accès au stockage ou Media Store. En outre, la façon dont l'application utilise l'autorisation doit faire partie des utilisations autorisées et doit être directement liée à sa fonctionnalité de base. Si votre application inclut un cas d'utilisation semblable à l'un des suivants, il est probable qu'elle puisse demander l'autorisation MANAGE_EXTERNAL_STORAGE :

  • Gestion de fichiers
  • Applications de sauvegarde et de restauration
  • Applications antivirus
  • Applications de gestion de documents
  • Recherche de fichiers sur l'appareil
  • Chiffrement du disque et des fichiers
  • Migration de données d'appareil à appareil