PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV Mobile 2025 → GPS en mode arrière plan
GPS en mode arrière plan
Started by jcl17, Jan., 19 2026 3:00 PM - 8 replies
Registered member
226 messages
Posted on January, 19 2026 - 3:00 PM
Bonjour à tous,

j'essaie de tracer un parcours sur une carte, pas de problème les points géoposition s'affichent bien.

là ou j'ai un problème c'est lorsque mon application passe en arrière plan, bien sûr j'ai toutes les autorisations y compris en mode arrière plan, je log bien le passage en arrière plan et remise en avant plan.

il me semble que le callback du gpssuitdeplacement s'interrompt et je pensais inscrire les geopositions dans un fichier local afin de pouvoir les reprendre dès que l'on passe en avant plan........ mais là je cale !

quelqu'un a-t-il déjà fait cela et peut-il me donner sa solution ?

merci d'avance

--
Jean-Claude Lequeux
Registered member
1,201 messages
Posted on January, 20 2026 - 7:06 AM
Salut.
Oui je fais cela.
Est-ce-que tu stockes la nouvelle position même quand tu es en arrière plan ?
Pour ma part, je fais (dans le callback)
Procedure GPS_SUIVI_DEPLACEMENT(MaRefreshPosition est une geoPosition)
locali est un entier=0
localj est un entier=0
sDirection est une chaîne

bAdd est un booléen=Faux

mMarqueur est un Marqueur
myLongitude est un réel=0
myLatitude est un réel=0

gMaVraiPosition=MaRefreshPosition

SI EnModeArrièrePlan() ALORS
SI gbTraceActive=Vrai AND gniDTrace<>0 ALORS
SI MaRefreshPosition..DirectionValide = Vrai ET MaRefreshPosition..PositionValide=Vrai ET MaRefreshPosition..VitesseValide=Vrai ET MaRefreshPosition.PrécisionValide=Vrai ALORS
SI MaRefreshPosition..Vitesse>0 ALORS
localj = MaRefreshPosition..Direction/22.5
locali = Arrondi(localj,0)
SI locali=0 ALORS
sDirection = "N/A"
SINON
sDirection = ROSE_DES_VENTS(locali)
FIN
FIN
FIN
POSITIONS.IDTRACE = gniDTrace
POSITIONS.LATITUDE = MaRefreshPosition.Latitude
POSITIONS.LONGITUDE = MaRefreshPosition.Longitude
POSITIONS.DIRECTION = sDirection
HAjoute(POSITIONS)
gniDPosition=POSITIONS.IDPOSITIONS
Ajoute(gsTabPositions,MaRefreshPosition)
FIN
RETOUR
FIN


--
Pascal Boulesteix
Applications Visiolittoral et WNat
Registered member
226 messages
Posted on January, 20 2026 - 10:15 AM
Merci Pascal, je vais m'en inspirer.

j'essaye de suivre un tracé de randonnée, pour la visu de la trace sur la carte c'est ok par contre pour avoir une vitesse moyenne cohérente et filtrant les mesures aberrantes quelle galère ! je ne sais pas comment tu fais ?

quand à l'altitude la marge d'erreur me paraît très importante, par contre le calcul des dénivelés + et - me semble correct

merci de ta réponse

--
Jean-Claude Lequeux
Registered member
226 messages
Posted on January, 30 2026 - 1:34 PM
Bonjour,

je reviens vers vous sur le sujet, j'utilise bien gpssuitdeplacement avec 1s et 2m dans mon callback en fonction de l'arrière plan ou du premier plan je charge bien mes points géo dans des tableaux différents et à la reprise en premier plan je récupère les ponts AR pour les tracer sur la carte.

les permissions sont bien demandées

j'ai mis un log en place pour tracer les différentes étapes

je m'aperçois en testant (en GO ou en Play store test) qu'en premier plan tout va bien mais par contre après le passage en arrière plan rien ne se passe et je ne passe plus dans mon callback apparemment.

avez-vous une solution ?

--
Jean-Claude Lequeux
Registered member
313 messages
Posted on January, 30 2026 - 2:22 PM
Bonjour,

J'utilise GPSSuitDéplacement avec 5s et 5m et je ne rencontre aucun problème en arrière plan.

Cela dit, quelques précisions s'imposent :
- Je déclare GPSInitParamètre(gpsAuto,gpsPrécisionElevée) et GPSSuitDéplacement(GPSSuitCallback,5s,5) dans le code d'initialisation du projet.
- Ensuite (toujours dans le code d'initialisation du projet), je lance un Thread "persistant" avec le paramètre "thpLocalisation" de manière à ce que l'application (et notamment le suivi GPS) continue de fonctionner même si les fenêtres ont été fermées (ou passées en arrière plan)

Plus d'infos ici :
https://doc.pcsoft.fr/fr-FR/?1000020584&productversion=xxA305067

Cordialement,
Fabrice
Registered member
313 messages
Posted on January, 30 2026 - 2:30 PM
Attention également au mode de gestion de la batterie qui peut arrêter l'exécution d'une application si elle est en arrière plan.
Il existe cependant une solution : https://doc.pcsoft.fr/fr-FR/?1000026008&name=sysoptimbatteriearriereplan_fonction
Cdlt
Posted on January, 30 2026 - 3:17 PM
Merci Fabrice pour ta réponse,

j'avais bien regardé le Thread persistant mais malheureusement je n'ai pas trouvé comment le coder, pourrais-tu me donner un exemple ? mon callback de gpssuitdeplacement est la procédure SuiviGPS

Cordialement
JC





Fabrice N a écrit :
Bonjour,

J'utilise GPSSuitDéplacement avec 5s et 5m et je ne rencontre aucun problème en arrière plan.

Cela dit, quelques précisions s'imposent :
- Je déclare GPSInitParamètre(gpsAuto,gpsPrécisionElevée) et GPSSuitDéplacement(GPSSuitCallback,5s,5) dans le code d'initialisation du projet.
- Ensuite (toujours dans le code d'initialisation du projet), je lance un Thread "persistant" avec le paramètre "thpLocalisation" de manière à ce que l'application (et notamment le suivi GPS) continue de fonctionner même si les fenêtres ont été fermées (ou passées en arrière plan)

Plus d'infos ici :
https://doc.pcsoft.fr/fr-FR/?1000020584&productversion=xxA305067

Cordialement,
Fabrice
Registered member
313 messages
Posted on January, 30 2026 - 4:27 PM
Bonjour,

Il n'y a pas grand chose à faire.
C'est assez bien expliqué dans l'aide en ligne.

Dans le code d'init du projet :
// Initialiser le suivi GPS :
GPSInitParamètre(gpsAuto, gpsPrécisionElevée)
GPSSuitDéplacement(SuiviGPS, 5s, 5) // Perso, je trouve que ça suffit largement :-)

// Démarrer le thread persistant :
ThreadExecute("MonThread1", threadContexteGlobal, LeThreadPersistant)

// Rendre le thread persistant pour empêcher la fermeture de l'application (tant que le thread n'est pas terminé)
Notif est une Notification
Notif.Titre = "Message à afficher"
Notif.ActionClic = ""
Notif.Supprimable = Faux
ThreadPersistant("MonThread1", Notif, thpLocalisation) // Usage pour Android : thpLocalisation (accès à la localisation)


La procédure "thread persistant" (qui ne fait rien) :
Procedure LeThreadPersistant()
TANTQUE PAS ThreadArrêtDemandé()
ThreadPause(1s)
FIN


Si tu veux arrêter ton application "proprement", il faut :
1) Arrêter le suivi GPS par : GPSTermine()
2) Arrêter le thread persistant par : ThreadDemandeArrêt("MonThread1")
3) Fermer la fenêtre ou faire un FinProgramme()

A toi d'adapter ce code en fonction de tes besoins...

Cordialement,
Fabrice
Message modified, January, 30 2026 - 4:30 PM
Registered member
226 messages
Posted on January, 30 2026 - 5:13 PM
Merci Fabrice c'est super, bien sûr j'ai conditionné le code thread par un typeconfiguration = android

:merci:

jc

--
Jean-Claude Lequeux