DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / Développer pour Android
  • Présentation
  • Rappel : le niveau d'API cible "TargetSdkVersion"
  • Comportement des applications en arrière-plan
  • Présentation
  • Modifications à partir de WINDEV Mobile 25 Update 3
  • Liste des fonctions concernées
WINDEV
WindowsLinuxJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac Catalyst
Autres
Procédures stockées
Avertissement
A partir de la version 26 (93), WINDEV Mobile gère Android 11. Pour plus de détails, consultez Android 11 : Modification de comportement des applications.
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. Avec la sortie de Android 10, le niveau d'API imposé pour que Google autorise le déploiement doit être à 29. Ce nouveau niveau d'API s'applique à partir du :
  • 3 août 2020 pour les nouvelles applications,
  • 2 novembre 2020 pour les applications mises à jour.
Voici les changements qui s'appliquent aux applications :
  1. Lorsque l'exécution se fait sous Android 10
    • L'ouverture d'une fenêtre n'est plus autorisée lorsque l'application est en arrière-plan. Pour plus de détails, consultez le paragraphe Comportement des applications en arrière-plan.
    • Il n'est plus autorisé de récupérer un identifiant unique pour l'appareil avec les fonctions SysIMEI et SysNumSérie. Les applications qui sont "device owner" ne sont pas concernées par cette limitation.
    • Il n'est plus autorisé de manipuler par programmation les paramètres de connexions en WiFi. Les fonctions WiFiActive (syntaxe pour modifier l'activation uniquement), WiFiAjouteRéseau, WifiSupprimeRéseau, WiFiConnecte et WiFiListeRéseau déclenchent une erreur fatale en cas d'utilisation sous Android 10 ou supérieur.
      Les applications qui sont "device owner" ne sont pas concernées par cette limitation.
    • Il n'est plus permis de récupérer le contenu du presse-papiers si l'application est en arrière-plan. Dans ce cas, la fonction PressePapier retournera une chaîne vide.
  2. Lorsque l'exécution se fait sous Android 10 et que le niveau d'API cible est en 29 :
    • Une application n'est plus autorisée à accéder à des fichiers situés sur le stockage externe, en dehors des répertoires spécifiques à cette application (fonction SysRepStockageExterne avec constantes sseApp*).
      Les accès en lecture ou en écriture à ces fichiers échoueront. Les chemins de fichiers fixés "en dur" ou construits à partir des fonctions SysRepCarteStockage ou SysRepStockageExterne avec les constantes ssePublicxxx ne doivent donc plus être utilisées. Cette limitation sera définitive à partir de Android 11 lorsque le niveau d'API sera relevé à 30. Avec Android 10 et le niveau d'API 29, il y a une tolérance pour l'accès à ces emplacements, ils restent donc utilisables avec cette version de WINDEV Mobile (pour cela l'attribut d'application requestLegacyExternalStorage est automatiquement ajouté), mais il est recommandé de prévoir les adaptations nécessaires dans les applications qui utiliseraient ces emplacements.
    • Une nouvelle permission a été mise en place dans Android 10 pour les fonctions qui permettent la localisation de l'appareil : la permission ACCESS_BACKGROUND_LOCATION.
      Cette permission est automatiquement ajoutée lors de l'utilisation dans l'application d'une des fonctions suivantes afin de permettre son utilisation en arrière-plan :
      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.
      Lorsque cette permission est ajoutée à l'application, l'utilisateur peut donc accepter l'accès à la position de l'appareil avec l'application en arrière-plan, limiter l'accès à la position à l'application active ou refuser l'accès à la position. L'utilisateur peut également modifier son autorisation à posteriori dans les réglages de Android.
Remarque : Lors de la publication d'une application sur le Play Store, l'erreur suivante peut être affichée : "La clé privée n'a pas été correctement chiffrée, ou nous n'acceptons pas ce type de clé". Il est nécessaire de recréer le fichier de signature de l'application (ce fichier peut être recrée dans l'assistant de génération de l'application).
Attention : Si des identifiants se basent sur le fichier de signature (par exemple identifiant Google Map), il est également nécessaire de re-générer ces identifiants avec la nouvelle clé.

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.
Ce niveau d'API est d'ailleurs modifiable. Il est donc possible dans une application WINDEV Mobile générée sans la mise à jour 118 661, d'indiquer le niveau d'API cible en 29. Mais dans ce cas l'application n'aura pas un framework adapté aux spécificités de ce niveau d'API. Il s'agit donc d'une solution fortement déconseillée, puisque que Android appliquera des règles de sécurité à l'application qui sont différentes de celles pour lesquelles elle a été testée.
Pour plus de détails, consultez le site de Google.
Comportement des applications en arrière-plan

Présentation

A partir de la version 10 de Android, Google supprime la possibilité pour une application en arrière-plan d'ouvrir une fenêtre (Activity) https://developer.android.com/guide/components/activities/background-starts. C'est un changement très important qui concerne toutes les applications Android, donc également les applications générées avec WINDEV Mobile. Seules les applications "device owner" ne sont pas concernées, dans ce mode spécifique, l'ouverture reste autorisée.
Une application jusqu'alors fonctionnelle avec toutes les versions en Android antérieures à la 10, aura donc des limitations si elle est installée sous Android 10 :
  • lorsque l'application est en arrière-plan, l'ouverture d'une fenêtre (OuvreFenêtreMobile, Info, Erreur, Dialogue, ...) n'est plus autorisée,
  • l'exécution d'une fonction WLangage qui conduit à l'ouverture d'une fenêtre n'est plus autorisée (SMSLanceAppli, ...),
  • le framework Android de l'application sera également bloqué et ne pourra ouvrir une fenêtre en arrière-plan. L'ouverture d'une fenêtre en arrière-plan par le framework est nécessaire à la gestion des fonctionnalités suivantes :
    • réception d'une notification push,
    • détection de l'entrée ou la sortie d'une région de balises beacon (fonction BeaconDetecteEnArrierePlan),
    • réception d'une nouvelle position lorsque le suivi (tracking) de la position est activé (fonction géoSuiviProcédure),
    • exécution de tâches en arrière-plan (fonctions TacheEnArrièrePlanxxx).
    • lancement de l'application au démarrage de l'appareil Android.
Ces limitations s'appliquent à toutes les applications générées avec WINDEV Mobile 25 "Update 2" et les versions antérieures.

Modifications à partir de WINDEV Mobile 25 Update 3

Le framework Android des applications WINDEV Mobile a été modifié afin de tenir compte de cette exigence de Google. Toutes les adaptations nécessaires sont incluses à partir de WINDEV Mobile 25 Update 3.
A partir de WINDEV Mobile 25 Update 3, les notifications push, le suivi de position, la détection beacon, ... sont rétablies. De plus le mécanisme de sécurité du WLangage est complété, afin de déclencher une erreur fatale si une fonction provoquant l'ouverture d'une fenêtre est appelée avec l'application en arrière-plan (voir la liste des fonctions concernées).
Afin de s'assurer du bon fonctionnement d'une application sous Android 10, il faut donc :
  • utiliser la version WINDEV Mobile 25 Update 3 minimum pour sa génération,
  • vérifier tous les traitements pouvant être lancés depuis l'application en arrière-plan : ces traitements ne doivent pas entraîner l'ouverture d'une fenêtre. Pour optimiser votre code, vous pouvez :
    • utiliser la fonction EnModeArrièrePlan qui permet de savoir si le traitement en cours s'exécute en arrière-plan ou non.
    • utiliser la fonction ExeInfo qui permet de savoir si l'application est lancée au démarrage de l'appareil. Dans ce cas, cette fonction appelée avec la constante exeLancement en paramètre retournera la constante exeDémarrage.
    • si une application a besoin d'interagir avec l'utilisateur alors qu'elle se trouve en arrière-plan, la solution préconisée est d'afficher une notification. Lors du clic sur la notification, l'application sera remise au premier plan et sera donc autorisée à ouvrir une fenêtre depuis la procédure appelée grâce à la propriété ActionClic de la notification (la variable de type Notification doit avoir la propriété ActiveApplication à Vrai).
  • en phase de mise au point de l'application sur un périphérique Android, utiliser le log Android afin de cerner l'origine d'un éventuel blocage durant l'exécution en arrière-plan. En effet, l'ouverture de fenêtre n'étant pas autorisée depuis l'arrière-plan, le mécanisme de sécurité du WLangage ne peut pas remonter d'information. Les erreurs sont donc consignées dans le log Android.

Liste des fonctions concernées

Les fonctions suivantes déclenchent une erreur fatale en cas d'appel depuis un code lancé en arrière-plan :
AlbumSélecteurRécupère une photo, une image ou une vidéo stockée dans l'album de photos de l'appareil mobile.
AppliOuvreFicheOuvre :
  • la fiche d'une application sur le market Android (Play Store)ou iOS (App Store) pour que l'utilisateur puisse la noter et/ou la commenter.
  • la fiche de paramétrage des achats In-App d'une application.
AuthIdentifieEffectue une authentification utilisant le protocole OAuth 2.0 sur un webservice quelconque.
AvertissementAffiche un message personnalisé dans une fenêtre d'avertissement système.
AvertissementAsynchroneAffiche un message personnalisé dans une fenêtre d'avertissement système non bloquante.
BTChangeVisibilitéChange la visibilité d'une radio Bluetooth.
CBCaptureDécode les informations stockées dans un code-barres en utilisant la caméra de l'appareil (Android, iPhone, iPad).
ConfirmerAffiche un message dans une boîte de dialogue standard proposant les réponses "Oui", "Non", "Annuler" et renvoie la réponse de l'utilisateur.
ConfirmerAsynchroneAffiche un message non bloquant dans une boîte de dialogue standard proposant les réponses "Oui", "Non", "Annuler" et appelle une procédure WLangage avec la réponse de l'utilisateur.
ContactAfficheOuvre la fiche d'un contact dans l'application native de gestion des contacts de l'appareil (Android, iPhone ou iPad).
ContactCréeAffiche la fenêtre de création de contact de l'application native de gestion des contacts de l'appareil (Android, iPhone ou iPad).
ContactEditeOuvre en édition la fiche d'un contact en cours dans l'application native de gestion des contacts de l'appareil (Android, iPhone ou iPad).
ContactSélectionneAffiche la liste des contacts de l'appareil (Android, iPhone ou iPad).
DateSélecteurAffiche le sélecteur de date du système.
DialogueAffiche une boîte de message et renvoie la valeur du bouton cliqué par l'utilisateur.
DialogueAsynchroneAffiche une boîte de message non bloquante et appelle une procédure WLangage avec la valeur du bouton cliqué par l'utilisateur.
EmailLanceAppliLance l'application native d'envoi d'emails du poste en cours :
  • Poste sous Windows,
  • Appareil mobile (Android, iPhone, iPad).
EmailOuvreMessagerieOuvre le logiciel de messagerie par défaut :
  • de l'internaute sur le poste navigateur.
  • de l'utilisateur sur le poste Windows en cours.
  • sur le téléphone.
ErreurAffiche un message d'erreur personnalisé dans une fenêtre d'erreur système.
ErreurAsynchroneAffiche un message d'erreur personnalisé dans une fenêtre d'erreur système non bloquante.
ErreurConstruitAffiche un message d'erreur personnalisé dans une fenêtre d'erreur système.
FBOuvreSessionPermet l'authentification et la connexion à Facebook.
géoLanceAppliLance l'application de cartographie native de l'appareil pour afficher :
  • une position géographique donnée,
  • un itinéraire entre deux positions.
GglImprimeDocumentLance l'impression d'un document (fichier texte, pdf, images, document Word, Excel, ...) en utilisant le service Cloud Print de Google.
gpwAuthLoginPermet de se connecter au Groupware Utilisateur en utilisant une authentification avec un compte de type Facebook, Google, Microsoft, etc.
HeureSélecteurAffiche le sélecteur d'heure du système.
inAppAchèteProduitEnvoie une demande d'achat d'un produit "In-App" associé à l'application.
InfoAffiche un message personnalisé dans une fenêtre d'information système.
InfoAsynchroneAffiche un message personnalisé et non bloquant dans une fenêtre d'information système.
InfoConstruitAffiche un message personnalisé dans une fenêtre d'information système.
KiosqueActivePasse l'application Android en cours en mode kiosque.
KiosqueDésactiveDésactive le mode kiosque pour l'application en cours.
LanceAppliLance l'exécution d'un programme (exécutable par exemple) depuis l'application en cours.
LanceAppliAssociéeOuvre directement un document dans son application associée.
LancePartageOuvre une popup permettant de sélectionner l'application à utiliser pour partager une ressource (texte ou document).
NFCEcritTagDéclenche l'écriture de données sur un tag (ou puce) NFC.
NFCEnvoieTagEnvoie un tag NFC à un autre appareil.
NFCLitTagDéclenche la lecture d'un tag (ou puce) NFC ou active la détection de tags NFC pour la fenêtre en cours.
OKAnnulerAffiche un message dans une boîte de dialogue standard proposant les réponses "OK" et "Annuler" et renvoie la réponse de l'utilisateur.
OKAnnulerAsynchroneAffiche un message dans une boîte de dialogue standard non bloquante proposant les réponses "OK" et "Annuler" et appelle une procédure WLangage avec la réponse de l'utilisateur.
OuiNonAffiche un message dans une boîte de dialogue standard proposant les réponses "Oui" et "Non" et renvoie la réponse de l'utilisateur.
OuiNonAsynchroneAffiche un message dans une boîte de dialogue standard non bloquante proposant les réponses "Oui" et "Non" et appelle une procédure WLangage avec la réponse de l'utilisateur.
OuvreFenêtreMobileOuvre une fenêtre dans une application mobile.
ReconnaissanceVocaleDéclencheDéclenche le service de reconnaissance vocale de l'appareil.
RendezVousAfficheAffiche un rendez-vous dans l'application native de gestion des rendez-vous de l'appareil mobile (Android ou iOS).
RendezVousCréePermet de créer un rendez-vous via la fenêtre de création de rendez-vous de l'application native de gestion des rendez-vous de l'appareil Android ou iOS.
SaisieAffiche un message en permettant à l'utilisateur de saisir une information.
SMSLanceAppliLance l'application native d'envoi de SMS de l'appareil (Android ou iPhone/iPad).
SynthèseVocaleInitialiseInitialise les paramètres de la synthèse vocale pour l'application en cours.
SynthèseVocaleLitFichierLit le contenu du fichier spécifié en utilisant le moteur de synthèse vocale de l'appareil.
SynthèseVocaleLitTexteLit le texte spécifié en utilisant le moteur de synthèse vocale de l'appareil.
SysOptimBatterieArrièrePlanPermet de gérer l'optimisation de la batterie :
  • Récupère le mode de gestion de l'optimisation de la batterie pour l'application en cours.
  • Demande à l'utilisateur de désactiver l'optimisation de la batterie de cette application sur l'appareil.
Cette fonction permet d'empêcher le système d'exploitation d'arrêter l'exécution de l'application lorsqu'elle est en arrière-plan.
telDialerAfficheOuvre l'application de téléphonie (dialer) par défaut et affiche le numéro spécifié. Aucun appel n'est déclenché.
telDialerComposeOuvre l'application de téléphonie (dialer) par défaut du téléphone et compose le numéro spécifié.
URISélecteurOuvre une fenêtre du système pour sélectionner une ressource provenant :
  • du système de fichiers de l'appareil,
  • du Cloud (Google Drive, Microsoft OneDrive, etc.)
  • ou d'un des gestionnaires de contenu installés sur l'appareil.
VérifieIdentitéUtilisateurPermet de vérifier l'identité réelle de l'utilisateur en cours par vérification biométrique.
VidéoLanceAppliLance l'application caméra native de l'appareil afin d'enregistrer une vidéo ou de prendre une photo.
Version minimum requise
  • Version 25
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 13/09/2024

Signaler une erreur ou faire une suggestion | Aide en ligne locale