DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • 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 WatchMac CatalystUniversal Windows 10 App
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.
  • Limitations concernant l'accès aux adresses Mac : La fonction NetAdresseMAC n'est plus disponible. Elle renvoie toujours une chaîne vide.

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 :
  • Respectez les spécifications Google concernant les applications utilisant la localisation en arrière-plan. Pour plus de détails, consultez https://support.google.com/googleplay/android-developer/answer/9799150. Si ces conditions ne sont pas remplies (notamment les conditions d'information de l'utilisateur), les applications pourront ne pas obtenir l'autorisation de publication sur Play Store.
  • La demande de permission de localisation en arrière-plan ne doit être effectuée que si la permission de localisation a été accordée. Dans le cas contraire, la fonction PermissionDemande échouera.
  • Si le choix de l'utilisateur lors de la demande de permission de localisation en arrière-plan est plus restrictif que le choix effectué lors de la demande de permission de localisation, l'application sera automatiquement relancée.
  • Sur les appareils en version inférieure à Android 10, si la permission de localisation a été accordée à l'application, la demande de permission de localisation en arrière-plan sera accordée sans affichage de fenêtre.
  • Les fonctions WLangage concernées sont les suivantes :
    BeaconDétecteEnArrièrePlanPermet à l'application d'être notifiée lorsque l'appareil entre ou sort d'une zone correspondant au rayon d'émission d'un ensemble de balises Beacon.
    BeaconDétectePrécisPermet de trouver les balises Beacon à proximité de l'appareil.
    BTLEListePériphériqueListe les périphériques Bluetooth Low Energy actuellement accessibles.
    BTListePériphériqueListe les périphériques Bluetooth accessibles.
    CarteSuitDéplacementAffiche la position courante de l'appareil dans un champ Carte et met à jour cette position durant son déplacement.
    géoSuiviActiveActive la gestion du suivi de position dans une application WINDEV Mobile.
    GPSArrêteDétectionArrête la détection de position déclenchée par la fonction GPSDétectePosition.
    GPSDernièrePositionRécupère les informations sur la dernière position connue de l'appareil.
    GPSDétectePositionDemande à être notifié lorsque le périphérique arrive à proximité d'une position donnée.
    GPSEtatRécupère l'état d'activation du fournisseur de géolocalisation ou demande à être notifié lors du changement d'état.
    GPSInfoRenvoie les informations sur le fournisseur de localisation utilisé par l'application pour les fonctions de géolocalisation.
    GPSInitParamètreInitialise les paramètres des fonctions WLangage de géolocalisation et recherche un fournisseur de localisation.
    GPSRécupèrePositionRécupère les informations sur la position actuelle du périphérique.
    GPSSuitDéplacementDemande à être notifié périodiquement de la position courante du périphérique.
    RéseauMobileInfoConnexionRenvoie les informations demandées concernant la connexion actuelle aux données sur le réseau mobile.
    WiFiDétectePointAccèsLance la détection des points d'accès Wi-Fi actuellement accessibles depuis l'appareil.
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 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.
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
Android 11
Bonjour, j'aimerai savoir les raisons des modifications qui interdisent l'accès aux fichiers et l'ouverture des fichiers .pdf dans l'Android 11. C'est un peu décevant ces modifications apportées car cela donne trop du travail du développeur et surtout rend des applications inutiles.
toutkin
17 oct. 2022