Jusqu'à Android 10, les applications Android peuvent lire et écrire des fichiers :
- dans les répertoires de l'application sur l'espace de stockage interne (fRepEnCours, fRepExe, fRepDonnées)
- à peu près n'importe où dans l'espace de stockage externe :
- arborescence personnalisée à partir de la racine du stockage externe renvoyée par la fonction SysRepCarteStockage
- dans les répertoires de l'application sur le stockage externe : fonction SysRepStockageExterne avec les constantes sseAppXXX.
- dans les répertoires publics : Documents, Download, Images, etc. sur le stockage externe : fonction SysRepStockageExterne avec les constantes ssePublicXXX.
Une application Android peut accéder aux fichiers créés par d'autres applications sur le stockage externe sans restrictions.
Lorsque l'application est exécutée sous Android 11, de nouvelles restrictions apparaissent :
- une application ne peut plus lire ou écrire de fichiers sur le stockage externe en dehors :
- des répertoires publics "Documents", "Download", "Images", etc. : utilisation de la fonction SysRepStockageExterne avec les constantes ssePublicXXX.
- des répertoires propres à l'application : utilisation de la fonction SysRepStockageExterne avec les constantes sseAppXXX.
- dans les répertoires publics, une application peut accéder (en lecture ou en écriture) uniquement aux fichiers qu'elle a elle-même créés.
Remarque : si l'application est désinstallée puis réinstallée, elle n'aura plus accès aux fichiers créés par la précédente installation dans les répertoires publics du stockage externe.
Une application ne peut donc plus accéder aux fichiers créés par une autre application en manipulant ces fichiers par leur chemin. Il faut que ce soit l'utilisateur final qui sélectionne lui-même les fichiers auxquels l'application peut accéder. Il est possible d'afficher un sélecteur de fichier avec la fonction
URISélecteur puis de manipuler le fichier par l'URI renvoyée par la fonction.
De même, la fonction
SysRepCarteStockage et la constante
ssePublic de la fonction
SysRepStockageExterne (répertoire racine de l'espace de stockage externe) ne devraient plus être utilisées pour de nouveaux développements.
Il existe cependant une permission spéciale qui permet d'outrepasser ces restrictions : MANAGE_EXTERNAL_STORAGE. Pour l'activer, il est nécessaire de :
- Ajouter manuellement la permission MANAGE_EXTERNAL_STORAGE dans l'assistant de génération de l'application Android.
- Demander explicitement la permission de stockage externe avec la fonction PermissionDemande. Par exemple :
PermissionDemande(permGestionStockageExterne, Callback)
PROCÉDURE INTERNE Callback(p est une Permission)
SI p.Accordé ALORS
// Utilisation possible des fonctions nécessitant l'utilisation du stockage externe
FIN
FIN
Cette demande de permission n'affiche pas la popup standard de demande de permission mais va ouvrir une fenêtre système permettant de donner le droit à l'application d'accéder à tous les fichiers sur le stockage externe sans restriction.
Attention : en cas de publication de l'application sur le store, il faut pouvoir justifier de la présence de cette permission. Seules les applications de type FileManager, Antivirus ou Gestionnaire de backup sont autorisées. Dans les autres cas, si cette permission est présente, la publication a de très fortes chances d'être refusée.