DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion des traitements / Threads, sémaphores, signaux et mutex
  • Affichage de la notification
  • Gestion de la batterie et notification persistante
  • Spécification du cas d'usage (Android 14)
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
Rend un thread persistant.
L'application n'est pas arrêtée tant qu'au moins un thread persistant est en cours d'exécution (même si toutes ses fenêtres ont été fermées).
L'utilisation d'un thread persistant permet par exemple :
  • de continuer la lecture d'un morceau de musique même si la fenêtre de lecture est fermée.
  • de transmettre des coordonnées GPS de façon permanente.
Exemple
// Lancement du thread déclenchant la lecture d'un morceau de musique
ThreadExécute("MonThread", threadContexteGlobal, ProcJoueMusique)

// Crée la notification à afficher pendant la lecture du morceau de musique
Notif est une Notification
Notif.Titre = "Lecture en cours ..."
Notif.ActionClic = ProcStopMusique
// Interdiction de masquer la notification
Notif.Supprimable = Faux

// Rend le thread persistant pour empêcher la fermeture de l'application 
// tant que le thread n'est pas terminé
// Usage précisé (Android 14 : thpMédia (lecture de la musique)
ThreadPersistant("MonThread", Notif, thpMédia)
Syntaxe
<Résultat> = ThreadPersistant(<Nom du thread> , <Notification à afficher> [, <Usage>])
<Résultat> : Booléen
  • Vrai si le thread a été rendu persistant,
  • Faux en cas d'erreur. Pour connaître le libellé de l'erreur, utilisez la fonction ErreurInfo avec la constante errMessage.
<Nom du thread> : Chaîne de caractères
Nom du thread qui doit devenir persistant. Ce nom est donné lors de l'exécution du thread (fonction ThreadExécute). Ce thread doit exister et utiliser le contexte global de l'application.
<Notification à afficher> : Variable de type Notification
Nom de la variable de type Notification correspondant à la notification à afficher pendant l'exécution du thread persistant.
Cette notification ne doit pas être déjà affichée. Si un thread persistant est en cours d'exécution au moment de l'appel de la fonction ThreadPersistant, la notification associée à ce thread sera remplacée par la notification spécifiée. Lorsque le thread aura terminé son exécution, la notification sera automatiquement masquée si plus aucun thread persistant n'est en cours.
<Usage> : Constante de type Entier
Nouveauté SaaS
Constante permettant de définir le cas d'usage du thread persistant. Ce paramètre est nécessaire à partir d'android 14.
thpAppareilConnectéInteraction avec des appareils connectés. Par exemple, interactions avec un capteur de fréquence cardiaque.
Permission ajoutée : android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE (type manifeste : connectedDevice)
Permissions supplémentaires requises :
  • au moins une parmi les suivantes doit avoir été déclarée :
    • android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE,
    • android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC,
    • android.permission.TRANSMIT_IR,android.permission.UWB_RANGING
  • ou au moins une parmi les suivantes doit avoir été déclarée et acceptée :
    • android.permission.BLUETOOTH_ADVERTISE,
    • android.permission.BLUETOOTH_CONNECT,
    • android.permission.BLUETOOTH_SCAN
thpCaméraAccès à la caméra en arrière-plan.
Permission ajoutée : android.permission.FOREGROUND_SERVICE_CAMERA (type manifeste : camera)
Permission supplémentaire requise : android.permission.CAMERA
thpLocalisationOpérations nécessitant un accès à la localisation, telles que la navigation et le partage de localisation.
Permission ajoutée : android.permission.FOREGROUND_SERVICE_LOCATION (type manifeste : location)
Permissions supplémentaires requises : au moins une parmi les permissions suivantes doit avoir été déclarée : android.permission.ACCESS_COARSE_LOCATION, android.permission.ACCESS_FINE_LOCATION
thpMédiaLecture continue de musique ou de vidéo en arrière-plan.
Permission ajoutée : android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK (type manifeste : mediaPlayback)
Permissions supplémentaires requises : aucune
thpMicroEnregistrement audio en arrière_plan
Permission ajoutée : android.permission.FOREGROUND_SERVICE_MICROPHONE (type manifeste : microphone)
Permissions supplémentaires requises : android.permission.RECORD_AUDIO
thpSantéSuivi d'activité physique.
Permission ajoutée : android.permission.FOREGROUND_SERVICE_HEALTH (type manifeste : health)
Permission supplémentaire requise :
  • Permission à déclarer : android.permission.HIGH_SAMPLING_RATE_SENSORS
  • ou au moins une parmi les suivantes doit avoir été déclarée et acceptée : android.permission.BODY_SENSORS, android.permission.ACTIVITY_RECOGNITION
thpServiceCourtOpération critique qui doit se terminer impérativement sans être interrompue. La durée maximale de l'opération ne doit pas dépasser 3 minutes.
Permission ajoutée : aucune (type manifeste : shortService)
thpSynchroDonneesSynchronisation de données. Par exemple, importation depuis une base de données.
Permission ajoutée : android.permission.FOREGROUND_SERVICE_DATA_SYNC (type manifeste : dataSync)
Permission supplémentaire requise : aucune
thpUsageSpécial
(Valeur par défaut)
Opération dont le cas d'usage ne correspond à aucun des cas prédéfinis.
Permission ajoutée : android.permission.FOREGROUND_SERVICE_SPECIAL_USE (type manifeste : specialUse)

Remarque : Il est possible de décrire plus précisément le cas d'usage du thread persistant en surchargeant le manifeste de l'application pour ajouter le noeud suivant en tant que fils du noeud <service> :
<property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
android:value="explication du cas d'usage"/>
Cela peut être nécessaire pour la publication sur le store Google.
Remarques

Affichage de la notification

  • L'affichage d'une notification pendant l'exécution d'un thread persistant est obligatoire. Ainsi, l'utilisateur est informé que l'application qu'il a lancée est toujours en cours d'exécution même si plus aucune fenêtre n'est ouverte. Il peut reprendre la main sur cette application lors du clic sur la notification.
    Il est également possible de relancer l'application lors du clic sur la notification : il suffit de renseigner la propriété ActiveApplication dans la variable de type Notification.
  • Conseil : Ne pas ouvrir de fenêtre depuis un thread persistant. Les fenêtres peuvent être ouvertes par exemple depuis la procédure appelée par la notification.
  • A partir de Android 13, l'utilisateur a la possibilité de masquer la notification. Il est possible d'empêcher cette action grâce à la propriété Supprimable de la variable de type Notification.

Gestion de la batterie et notification persistante

L'optimisation de l'utilisation de la batterie intégrée à partir de la version 10 de Android peut interrompre un thread rendu persistant par la fonction ThreadPersistant. Dans ce cas, la fonction SysOptimBatterieArrièrePlan permet d'autoriser l'application à utiliser la batterie et donc permet également de conserver le thread persistant.
Ce thème est abordé dans le billet suivant du blog du Support Technique :
https://blogs.pcsoft.fr/fr/thread-persistant-tache-arriere-plan-solution-retenir-action-fond-application-android/281474976710897/read.awp.
Nouveauté SaaS

Spécification du cas d'usage (Android 14)

A partir de Android 14, il est nécessaire d'indiquer le ou les cas d'usage du thread persistant lors de l'appel à la fonction ThreadPersistant grâce au paramètre <Usage>.
Une nouvelle permission sera automatiquement ajoutée selon les cas d'usage spécifiés.
Certains cas d'usage nécessitent que des permissions associées soient également déclarées. Ces permissions ne sont pas ajoutées automatiquement. Si les permissions associées n'ont pas été ajoutées à l'application, une erreur fatale sera levée.
Par exemple si la constante thpCamera est utilisée, la permission android.permission.FOREGROUND_SERVICE_CAMERA sera automatiquement ajoutée à l'application et la permission android.permission.CAMERA est requise.
Liste des exemples associés :
Android Notifications Persistantes Android (WINDEV Mobile) : Android Notifications Persistantes
[ + ] Cet exemple permet de créer des notifications persistantes qui apparaissent même si l'application n'est plus utilisée.
Un thread persistant lancé au démarrage de l'appareil permet d'envoyer les notifications.
Classification Métier / UI : Code neutre
Composante : wd300android.jar
Version minimum requise
  • Version 18
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 11/07/2024

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