PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Nouveauté WINDEV Mobile 26 !
  • Présentation
  • Rappel : le niveau d'API cible "TargetSdkVersion"
  • Applications utilisant la permission de la localisation en arrière-plan
  • Applications utilisant l'accès aux fichiers
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget iOSApple WatchCatalystUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Présentation
Après chaque déploiement d'une nouvelle version de Android, Google demande à relever le niveau d'API cible "TargetSdkVersion" des applications pour les déployer dans le Play Store.
Voici les changements qui s'appliquent aux applications :
  • Géolocalisation : Impossibilité de regrouper les demandes de permissions ACCESS_FINE_LOCATION et ACCESS_BACKGROUND_LOCATION en une seule opération. Ce changement implique un changement de programmation des applications utilisant la permission de la localisation en arrière-plan.
  • Accès aux fichiers : une application Android exécutée sous Android 11 ne peut plus accéder aux fichiers créés par une autre application en manipulant ces fichiers par leur chemin. Ce changement implique une vérification des traitements de manipulation des fichiers et un changement de programmation si nécessaire.

Rappel : le niveau d'API cible "TargetSdkVersion"

Lors de la compilation d'une application pour Android, l'APK généré inclus un niveau d'API cible "TargetSdkVersion" du SDK Android. Avec ce niveau d'API cible, le système Android détermine les fonctionnalités dont peut disposer l'application, et les règles de sécurité qui doivent lui être appliquées.
Le niveau d'API cible "TargetSdkVersion" attribué à une application est visible dans l'assistant de génération de l'APK à l'étape "Configuration" de l'assistant de génération :
  1. Cliquez sur "Configuration avancée",
  2. Dans la fenêtre "Configuration avancée", cliquez sur "Editer le manifeste",
  3. Déroulez le noeud "uses-sdk",
  4. L'entrée "android:targetSdkVersion" permet de connaître le niveau d'API cible.
Pour plus de détails, consultez le site de Google.
Applications utilisant la permission de la localisation en arrière-plan
A partir de WINDEV Mobile 26 Update 3, seules les permissions de localisation (ACCESS_FINE_LOCATION ou ACCESS_COARSE_LOCATION) seront intégrées lors de la génération de l'application si nécessaire.
Pour les applications nécessitant la localisation en arrière-plan, il est nécessaire de :
  1. Ajouter manuellement la permission "ACCESS_BACKGROUND_LOCATION" dans l'assistant de génération de l'application Android.
  2. Demander explicitement la permission de localisation en arrière-plan avec la fonction PermissionDemande. Par exemple :
    PermissionDemande(permLocalisationEnArrièrePlan, Callback)
    PROCÉDURE INTERNE Callback(p est une Permission)
    SI p.Accordé ALORS
    // Utilisation possible des fonctions nécessitant la localisation en arrière-plan
    FIN
    FIN
Remarques :
Applications utilisant l'accès aux fichiers
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 ne peut accéder (en lecture ou en écriture) qu'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.
Autre solution possible (uniquement pour les applications existantes) : Ajouter l'attribut preserveLegacyExternalStorage au manifeste de l'application. L'ajout de l'attribut preserveLegacyExternalStorage à une application est détaillé dans la FAQ 21 548 : Comment autoriser l'accès aux fichiers de la carte de stockage pour une application existante (attribut preserveLegacyExternalStorage) ?. Cette option permet de conserver les mêmes règles d'accès qu'avant le changement d'api level mais il sera effectif uniquement pour les applications existantes. Pour une nouvelle installation ou si l'application est désinstallée puis réinstallée, cette option sera ignorée.
Version minimum requise
  • Version 26
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire