PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → WM26/27+Android 12 : gros problème de géopositionnement
WM26/27+Android 12 : gros problème de géopositionnement
Débuté par Pascal BOULESTEIX, 26 fév. 2022 08:45 - 15 réponses
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 26 février 2022 - 08:45
Bonjour

J'utilise principalement un Samsung S10 pour mes tests sous Android.

Ce téléphone est récemment passé en Android 12 (12 janvier).

Depuis, et incidemment, je me suis rendu compte que la récupération de la localisation, pilier de mon application, renvoie des données fausses et/ou approximatives.

Si je dis que les coordonnées sont fausses c'est parce que la même application (compilée avec WM26 ou WM27) sur des Android 7, 8, 9, 10 et 11 renvoie des données justes avec des précisions variant selon les modèles de téléphones entre 1m et 3m.

Mon application demande explicitement les autorisations d'accès à la position pour :
- le foreground (android.permission.ACCESS_COARSE_LOCATION et android.permission.ACCESS_FINE_LOCATION)
- le background (android.permission.ACCESS_BACKGROUND_LOCATION).

Ce que je remarque c'est que l'instruction GPSSuitDéplacement avec comme paramètres de rafraichissement 1 seconde et 1 mètre ne s'active pas conformément au paramétrage demandé.

Si j'utilise l'application sur un Android < 12, pas de problème, le cadencement du rafraichissement est conforme.

En parallèle des tests de mon application, j'ai analysé les résultats de géopositionnement retournés par les applications "GPSTest" et "GPS Test"

La où mon application retourne un positionnement à 20m près, GPSTest, lui, renvoie à une précision variant entre 1m et 4m.

Donc, avec mon application, au lieu d'être dans la rue, je suis dans mon salon !

Pour avancer, j'aurai besoin d'un avis externe car malheureusement, je n'ai pas un autre téléphone sous Android 12.

Est-ce mon téléphone qui est défaillant ou bien est-ce WM qui ne sait pas travailler avec Android 12 ?

Ainsi, en me basant sur le projet exemple PCSoft "GPS android", j'ai créé deux projets identiques, un pour WM26 et l'autre pour WM27.

Si vous avez le temps, pourriez-vous faire un test d'un/des projet(s) sur votre téléphone Android 12 et rendre compte des résultats ?

Projet pour WM26 :https://www.saxrub/net/WindevMobile/Android_GPS_26.zip
Projet pour WM27 :https://www.saxrub/net/WindevMobile/Android_GPS_27.zip>
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Membre enregistré
3 347 messages
Popularité : +93 (137 votes)
Posté le 26 février 2022 - 13:24
Je suppose que tu vérifies après la récupération de la position
Que celle ci est bien valide avec la propriété
PositionValide
Voirhttps://ayuda.windev.es/fr-FR/…>
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 26 février 2022 - 15:21
oui bien sûr
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 26 février 2022 - 16:21
En fait, dans l'exemple PCSoft il n'y a pas de vérification de la positionvalide ; il y a les autres direction, altitude...
>Je modifie les projets pour rajouter positionvalide mais si les autres sont valides ....
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 26 février 2022 - 16:26
Mêmes résultats avec positionValide }:(>
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 05 mars 2022 - 13:38
Visiblement mon sujet n'interpelle pas grand monde, et pourtant (j'ai aussi ouvert un incident PCSoft) !
Pour motiver les troupes, deux exemples :

Les images suivantes représentent des captures de trace faient en même temps par mon application sur deux téléphones.

La première image est issue d'un Galaxy S8 sous Android 9 : la trace est nickel, le récupère position cadencée à 1s ou 1m.

La seconde a été faite sur un Galaxy S10 sous Android 12 : la trace est fausse et approximative.

De plus en mode en arrière plan, rien n'est capturé sur le S10 Android 12, bien qu'un thread persistant soit lancé et que access_backgroud_position demandé et accepté (comme sur le S8).

Bref : comme je le disais, est-ce un problème de mon téléphone S10 ou un bug de WM26/27 ? Je penche pour la deuxième option car d'autres logiciels du style GPS Test, maps indiquent la bonne position.

Notez aussi que le projet WM Sport disponible et distribué par PCSoft donne de mauvaises données sous Android 12.

Y aurait-il qqu qui pourrait tester sous android 12 un des minis projets fournis dans mon premier post ?







>
Posté le 09 mars 2022 - 16:47
Je suis plus ou moins dans le même cas que vous, mais sous Android 10 et avec géoposition via les bornes wifi, et ça fonctionnait bien en Android 8.

La procédure lancée quand l'application est en arrière plan est complètement chaotique, ça ne vaut rien pour ma part.

De plus, la procédure GPSRécupèrePosition() ne fonctionne plus du tout pour moi.

>Je ne sais pas trop tout ce qui a changé, mais Windev Mobile a du mal à suivre l'évolution semblerait-il
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 10 mars 2022 - 08:57
Quel version de WM utilises-tu ?
Dans mon cas, avec WM26 tout fonctionne sur tous les android < 12
Pour WM27, il semble que ça fonctionne aussi mais comme il y a d'autres bugs et régressions liés à cette version, je n'ai pas fait tous les tests d'homologation de mon appli (ceci-dit, je dois faire plus de tests que PCSoft}:()

Concernant le access_backgroud_location, as-tu :
0 - utilisé WM26, les versions antérieures ne peuvent pas utiliser le backgroud sur android >=10.
1 - demandé explicitement access_coarse_location et access_fine_location dans la même demande (recommandation android) ?
2 - puis, demandé explicitement access_backgroud_location ?
3 - avant d'initialisé le GPS, lances-tu un thread persitant sans lequel, le GPSSuitDéplacement ne fonctionnera pas quand l'application sera en arrière-plan ?
>4 - quels sont les paramètres passés à GPSSuitDéplacement (pour ma part, 100 centièmes de seconde et 1 mètre.
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 10 mars 2022 - 08:59
PCSoft a reproduit le bug avec mon mini projet et un incident officiel est créé ; à suivre !
Posté le 10 mars 2022 - 13:09
Bonjour,

Dans les 1ères lignes de la déclaration de mon projet, je fais ce code qui me permet de gérer la demande permissions (qui sont bien toutes présentes dans le plan des permissions à la compilation de l'application, donc la demande 'particulière' de la permission GPS en background).
Permission_Demande est un booléen=FAUX
POUR TOUT ÉLÉMENT Perm DEPermissionListe()
SI Perm..Accordé=FAUXALORS
Permission_Demande=FAUX
PermissionDemande(Perm,Permission_Demande_Callback)
TANTQUE Permission_Demande=FAUX
Multitâche( -5)
FIN
FIN
FIN
PROCEDURE INTERNEPermission_Demande_Callback(Perm est unePermission)
SI Perm..Accordé=FAUXALORS
Erreur("NO Permission !!"+RC+RC+Perm..Nom+RC+RC+Perm..Description)
FinProgramme()
FIN
Permission_Demande=VRAI
FIN


Sinon, j'ai commencé ce projet Android en Windev26 (version intégré de Windev Mobile dans Windev), en version 100j plus précisémment. Actuellement je suis en Windev27 77j.

Et je n'ai pas de thread persistant, mon application n'est pas spécialement conçue pour un usage en background.

Je précise aussi que la fonction que j'utilisais initialement ne marche plus du tout (j'arrive en timeout).
GPSRécupèrePosition(30s)


Actuellement selon le type de périphérique, j'ai décidé d'utiliser des fonctions différentes (car c'est une application principalement utilisée par des scanners Zebra TC8300 qui n'ont pas de GPS, donc j'utilise la localisation par le network (bornes wifi))

SIgbZebra=VRAIALORS

GPSInitParamètre(gpsAuto)// , gpsPrécisionElevée + gpsEnergieElevée )
géoSuiviActive(GPS_Suivi_Actif)
PROCEDURE INTERNEGPS_Suivi_Actif(bSuiviActif est booléen,sErreur est une chaîne)
SIbSuiviActif=FAUXALORS
Erreur("GPS_Suivi_Actif = Faux"+RC+RC+sErreur)
RETOUR
FIN
FIN

SIgéoSuiviProcédure(GPS_Suit_Déplacement) =FAUXALORS
Erreur("géoSuiviProcédure( GPS_Suit_Déplacement ) = Faux")
FIN

SINON

GPSInitParamètre(gpsSatellite,gpsPrécisionElevée+gpsVitesse+gpsEnergieMoyenne)
GPSSuitDéplacement(GPS_Suit_Déplacement,1000,5)

FIN
>
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 10 mars 2022 - 14:34
Si tu n'as pas de GPS, le GPSInitParamètre avec gpsSatellite pourrait être remplacé par gpsRéseau d'où peut-être le timeout
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 09 avril 2022 - 13:01
Bonjour à tous
Après moultes échanges avec le support, je suis arrivé TOUT SEUL à comprendre d'où vient le problème de positionnement sous Android 12.

J'ai acheté un autre téléphone directement équipé d'Android 12 ; le problème restait le même ! Mon bon vieux Samsung S10+ n'était donc pas fatigué.

Ensuite j'ai eu l'idée de faire trois captures de traces avec trois applications différents, en même temps, sur le même téléphone :
- la première avec l'application WM Sport présente sur Play Store et éditée par PCSoft
- la seconde avec mon application Visiolittoral
- la troisième avec l'application Geo Tracker

Dans les trois captures d'écran qui suivent, vous constaterez que WM Sport et mon application perdent le suivi de position au même moment (Patates rouge) alors que la trace de Geo Tracker (Patate verte) est elle valide.

J'en suis arrivé à l’hypothèse suivante : sous android 12, WM perd la position quand il arrive dans une zone blanche (notez qu'avec android < 12, il n'y a pas de problème) !

J'ai donc une énième fois décortiqué mon code pour voir comment était initialisé le GPSInitParamètre.

Dans mon code j'utilisais le paramètre gpsAuto dans la fonction GPSInitParamètre (GPSInitParamètre(gpsAuto, gpsPrécisionElevée+gpsAltitude+gpsVitesse+gpsDirection+gpsEnergieElevée))
et quand j'interrogeais le GPSInfo(gpsType) j'avais toujours comme réponse gpsRéseau même en zone blanche !

J'ai modifié le code pour initialiser le GPS avec le paramètre gpsSatellite, et là, comme par miracle, la trace est correctement capturée.

Notez aussi, que la précision de la position bloquée à 20m avec GPSAuto et redevenue normal (2,5m) avec GPSSatellite !

J'en déduit donc que sous Android 12, GPSAuto ne fonctionne plus correctement.

J'ai informé le support de mes découvertes.

A suivre.














--
Pascal Boulesteix
>Applications Visiolittoral et WNat
Membre enregistré
15 messages
Popularité : +2 (2 votes)
Posté le 12 avril 2022 - 13:17
Merci bien d'avoir partagé ce retour d'expérience :merci:>
Message modifié, 12 avril 2022 - 13:17
Membre enregistré
328 messages
Posté le 10 juin 2022 - 15:37
ATTENTION AUSSI au réglage de la localisation dans les paramètres du mobile.
Par exemple sur mon Zebra TC57, j'ai le choix pour le mode de localisation entre :
Haute précision (GPS, Wi-Fi, BT, mobile), le plus consommateur
Economie de batterie (Wi-Fi, BT, mobile), satellites jamais sollicités
Appareil uniquement (GPS + capteurs de l'appareil), réseaux jamais sollicités
Et en plus, dans le paramètre Recherche (qui concerne uniquement les réseaux), je peux choisir d'exclure le Wi-Fi et/ou le BT.

En revanche, le seul moyen que j'ai trouvé pour savoir si GPSRécupèrePosition va fonctionner, c'est ...... de le lancer et d'attendre l'erreur !
Ce que je souhaite c'est utiliser en priorité les satellites, mais j'aimerais me rabattre automatiquement sur les réseaux si les satellites ne donnent rien avant d'afficher un méchant message à l'utilisateur.

>Comment faites-vous ?
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 13 juin 2022 - 08:25
Et bien, pour l'instant, tant que le bug n'est pas corrigé, je force GPSattelite pour Android 12 :
<CompileSITypeConfiguration=iOS>
GPSInitParamètre(gpsAuto,gpsPrécisionElevée+gpsAltitude+gpsVitesse+gpsDirection+gpsEnergieElevée)
<FIN>

<CompileSITypeConfiguration=Android>
SIDroite("000"+SysVersionAndroid(sysVersionNuméro),3)>="012"ALORS
GPSInitParamètre(gpsSatellite,gpsPrécisionElevée+gpsAltitude+gpsVitesse+gpsDirection+gpsEnergieElevée)
SINON
GPSInitParamètre(gpsAuto,gpsPrécisionElevée+gpsAltitude+gpsVitesse+gpsDirection+gpsEnergieElevée)
FIN
<FIN>


--
Pascal Boulesteix
>Applications Visiolittoral et WNat