PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile 2025 → GPS en mode arrière plan
GPS en mode arrière plan
Iniciado por jcl17, 19,ene. 2026 15:00 - 8 respuestas
Miembro registrado
226 mensajes
Publicado el 19,enero 2026 - 15:00
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
Miembro registrado
1.201 mensajes
Publicado el 20,enero 2026 - 07:06
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
Miembro registrado
226 mensajes
Publicado el 20,enero 2026 - 10:15
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
Miembro registrado
226 mensajes
Publicado el 30,enero 2026 - 13:34
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
Miembro registrado
313 mensajes
Publicado el 30,enero 2026 - 14:22
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
Miembro registrado
313 mensajes
Publicado el 30,enero 2026 - 14:30
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
Publicado el 30,enero 2026 - 15:17
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
Miembro registrado
313 mensajes
Publicado el 30,enero 2026 - 16:27
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
Mensaje modificado, 30,enero 2026 - 16:30
Miembro registrado
226 mensajes
Publicado el 30,enero 2026 - 17:13
Merci Fabrice c'est super, bien sûr j'ai conditionné le code thread par un typeconfiguration = android

:merci:

jc

--
Jean-Claude Lequeux