French Permission Android 11

Oceaneml

Member
Licensed User
Longtime User
Bonjour,
Depuis la mise à jour Android 11 One UI 3.1 la permission "stockage" à été transformée en permission "accès multimédia uniquement" donc erreur d'accès à des fichiers personnels avec les instructions File.DirRootExternal et autres fonctions utilisables avec la permission WRITE_EXTERNAL_STORAGE dans le Manifest Editor.
Je ne trouve pas comment contourner ce problème.
Merci pour votre aide.
Cordialement
 

BW17

Member
Licensed User
Longtime User
Bonjour,

Je suis dans le même cas que toi...
La seule solution semble de ne plus utiliser File.DirRootExternal, mais pour moi c'est un problème car j'utilise OSMDroid pour mes cartes offline, et cette bibliothèque utilise le dossier "osmdroid" qui doit être obligatoirement placé dans la racine du stockage, et donc pas accessible autrement que par File.DirRootExternal .
 

Oceaneml

Member
Licensed User
Longtime User
Bonjour,
J'ai réglé le problème avec File.DirInternal et en limitant targetSdkVersion="29" dans le manifest.
Ayant d'abord changé File.RootExternal en File.DirInternal puis targetSdkVersion="29" au lieu de "30" et que j'ai vu que ça marchait je n'ai pas cherché à revenir en arrière avec File.RootExternal car ça ne me gène pas mais je pense qu'utiliser TargetSdkVersion="29" évite de se battre avec les permissions de Android 11 !
Pour l'instant je n'ai rien trouvé mieux pour garder File.RootExternal avec les permissions actuelles de Android 11 ...
 

Xfood

Expert
Licensed User
essayez d'ajouter ceci dans le manifeste,
en plus des autorisations habituelles de lecture et d'écriture,
je n'ai pas Android 11 donc je ne peux pas essayer

SetApplicationAttribute(android:requestLegacyExternalStorage, true)
 

BW17

Member
Licensed User
Longtime User
Bonjour,

Personnellement, ce qui m'a fait peur, c'est ce message dans la console développeur :

Nous avons détecté l'indicateur requestLegacyExternalStorage dans le fichier manifeste d'un ou plusieurs des app bundles ou des APK de votre application.
Les développeurs dont les applications sont exécutées sur Android 11 ou version ultérieure doivent avoir recours à l'espace de stockage cloisonné pour que les utilisateurs puissent mieux contrôler l'accès à l'espace de stockage de leur appareil. À compter du 5 mai, pour proposer votre application sous Android 11 ou version ultérieure, vous devrez suivre l'une des procédures ci-dessous :

  • Mettre à jour votre application afin de suivre des bonnes pratiques plus respectueuses de la confidentialité, par exemple grâce aux API Storage Access Framework ou Media Store
  • Mettre à jour votre application pour déclarer l'autorisation d'accès à tous les fichiers (MANAGE_EXTERNAL_STORAGE) dans le fichier manifeste, et remplir la déclaration d'autorisation d'accès à tous les fichiers dans la Play Console à partir du 5 mai
  • Supprimer l'autorisation d'accès à tous les fichiers de votre application
Pour les applications ciblant Android 11, l'indicateur requestLegacyExternalStorage sera ignoré. Vous devez utiliser l'autorisation d'accès à tous les fichiers pour conserver un accès étendu.
Les applications qui demandent d'accéder à l'autorisation d'accès à tous les fichiers alors que cela ne leur est pas permis seront supprimées de Google Play, et vous ne pourrez pas les mettre à jour.


Comme dit plus haut, je n'utilise File.DirRootExternal que pour avoir accès au dossier "osmdroid" de la racine de l'appareil, mais si je ne peux plus l'utiliser, mon application ne fonctionnera plus...
Pour le moment pour les permissions de lecture/écriture de ce dossier, j'utilise :

rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
If Result = False Then
ToastMessageShow("Pas de permission d'écriture en mémoire...", False)
End If
rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE)
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
If Result = False Then
ToastMessageShow("Pas de permission de lecture de la mémoire...", False)
End If

et dans le manifest :

AddPermission(android.permission.READ_EXTERNAL_STORAGE)
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)

mais je crains qu'à partir du 5 Mai Google bloque mon application à cause de cela ?

Pour l'heure, je cible targetSdkVersion="29", et j'ai enlevé requestLegacyExternalStorage du manifest et ça fonctionne, mais à l'avenir, j'imagine que je vais devoir passer à targetSdkVersion="30" pour Android 11, et là je n'ai pas de solution...


La solution idéale serait qu'OSMDroid puisse utiliser un dossier différent dans file.DirInternal, mais ça je ne sais pas faire...
 
Top