| |
Posté le 02 février 2017 - 11:19 |
Bonjour, Chaque appels de GPSRecuperePosition() bloque le thread principal pendant au moin 30 secondes(seulement en android, en IOS c'est instantanne), devrais-je l'executer dans un thread secondaire ? (il me semble que l'appel depuis un thread secondaire cause des exceptions) Sinon j'ai vu qu'il y a aussi GPSDernierePosition(), quelle differences ? J'ai aussi pense a utilise les fonctions natives en java mais plus complique.
Merci cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +36 (36 votes) |
|
Posté le 02 février 2017 - 18:50 |
Bonjour,
GPSRecuperePosition doit être exécuté dans un thread. Par ailleurs, il y a un timeout paramétrable dans cette fonction.
Il faut utiliser GPSSuitDéplacement à la place.
Cdlt - Eric.
-- Eric DELATTRE http://www.yoosite.frMessage modifié, 02 février 2017 - 18:50 |
| |
| |
| | | |
|
| | |
| |
Posté le 03 février 2017 - 10:34 |
Eric67 a écrit :
Bonjour, GPSRecuperePosition doit être exécuté dans un thread. Par ailleurs, il y a un timeout paramétrable dans cette fonction. Il faut utiliser GPSSuitDéplacement à la place. Cdlt - Eric. -- Eric DELATTRE http://www.yoosite.fr
D'accord merci, du coup je dois utiliser GPSSuitDeplacement ou GPSRecuperePosition ? J'ai essaye les 2 : (une apres l'autre evidemment)
GPSSuitDéplacement(AsyncRecuperePosition)
Procedure AsyncRecuperePosition(g est une geoPosition) Info(g..Latitude,g..Longitude)
Et aussi :
AsyncRecuperePosition()
Procedure AsyncRecuperePosition() g est une geoPosition = GPSRécupèrePosition() Info(g..Latitude,g..Longitude)
Resultat : les fonctions de localisation me retourne toujours 0 0 quand elles sont utilises en tache parallele, sinon dans le thread principal ca bloque pendant min 30 sec...
Sur la version IOS aucun probleme a ce niveau la pourtant.
J'ai essaye de recuperer la localisation en Java malheureusement windev ne trouve pas les classes
//import com.google.android.gms.location.*;
de google malgres que j'ai ajoute toutes les permissions liees a la localisation lors de la generation.
Je sais plus quoi faire ... |
| |
| |
| | | |
|
| | |
| |
Posté le 15 février 2017 - 09:28 |
Personne n'utilise la géolocalisation en Android ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +36 (36 votes) |
|
Posté le 15 février 2017 - 12:15 |
Bonjour,
La géolocalisation sur android fonctionne à la perfection. Il suffit de tester l'un des exemples d'une LST pour s'en rendre compte.
Attention, pas la géolocalisation "faible consommation" avec géoSuiviActive. qui elle est absolument inexploitable !
Cdlt - Eric.
-- Eric DELATTRE http://www.yoosite.fr |
| |
| |
| | | |
|
| | |
| |
Posté le 15 février 2017 - 13:33 |
si, mais comme tout marche bien, on ne peut pas t'aider
Le 2/15/2017 à 3:28 AM, A-B a écrit : > Personne n'utilise la géolocalisation en Android ? |
| |
| |
| | | |
|
| | |
| |
Posté le 16 mars 2017 - 16:26 |
Bonjour,
j'ai le même souci sous android.
GPSRécupèrePosition renvoie 0.0 tout le temps sur mon wiko fever de test.
pourtant sur Google map quand je clic sur "ma position", c'est récupéré instantanément !
quelqu'un a une astuce ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +36 (36 votes) |
|
Posté le 17 mars 2017 - 09:19 |
Bonjour,
Un peu de code aiderait à... aider.
Comment est initialisé le GPS ?
Le mieux est encore de prendre l'exemple de PC Soft "Android GPS". Si cela fonctionne, alors comparer son code avec celui de la démo.
Cdlt - Eric.
-- Eric DELATTRE http://www.yoosite.fr |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 39 messages Popularité : +4 (4 votes) |
|
Posté le 17 mars 2017 - 16:40 |
Bonjour,
Moi aussi j'ai eu ce problème sur android. J'ai créer une application pour les animaux perdu. avec de la géolocalisation. Sur android, ce fut une vrais ..... Je vous envoie le code que j'ai fait :
dans ma page principal j'ai appeler:COL_Geolocalisation.ActivationGPS() dedans il y a :
Procedure ActivationGPS() TANTQUE GPSEtat() <> 1 SELON Dialogue("Pour utiliser l'application, vous devez activer le GPS de votre téléphone.") CAS 0 FIN FIN
GPSInitParamètre(gpsAuto,gpsPrécisionElevée+gpsEnergieElevée) Maposition = GPSRécupèrePosition(100,"Récupération de votre position en cours !") géoSuiviActive(geo_activation) GPSSuitDéplacement(CB_GeoSuiviActive,2,1)
LA procédure de geo_activation :
Procedure geo_activation(bSuiviActif est booléen, cErreur est une chaîne) SI PAS bSuiviActif ALORS Erreur(cErreur) RETOUR FIN LA procédure de CB_GeoSuiviActive :
Procedure CB_GeoSuiviActive(pos est une geoPosition)
SI pos.Latitude <> 0 ET pos.Longitude <> 0 ALORS Maposition = pos SauveParamètre(POSITION_LATITUDE,Maposition.Latitude) SauveParamètre(POSITION_LONGITUDE,Maposition.Longitude) udpate_gps(MonidProfil,Maposition.Latitude,Maposition.Longitude) FIN
J’espère que ce bout de code vous servira.
Petit cadeau, ceci calcule si dans un certain périmètre autour de moi ( madistance ) il y à des animaux perdu.
madistance est un entier = ChargeParamètre(DISTANCE) i est un entier = 0 HLitRecherchePremier(utilisateurs,IDutilisateurs,MonidProfil) SI madistance <1 ALORS madistance = 1 FIN
SI HTrouve ALORS ReqClient est une Source dede Données sMaReq est une chaîne = [ SELECT utilisateurs.Latitude AS Latitude,utilisateurs.Longitude AS Longitude,utilisateurs.coord_x AS coord_x,utilisateurs.coord_y AS coord_y, utilisateurs.coord_z AS coord_z,Animal_possédé.Type AS Type,Animal_possédé.Nom AS Nom,Animal_possédé.IDAnimal_possédé AS IDAnimal_possédé, SQRT(((POWER(( utilisateurs.coord_x-%1),2)+POWER( ( utilisateurs.coord_y - %2) , 2) ) + POWER( ( utilisateurs.coord_z - %3 ) , 2) ) ) AS distancess FROM utilisateurs, Animal_possédé WHERE utilisateurs.IDutilisateurs = Animal_possédé.IDutilisateurs AND ( distancess <= %4 AND Animal_possédé.Perdu = 1 AND Animal_possédé.Vérifié = 1 ) ] sMaReq = ChaîneConstruit(sMaReq,utilisateurs.coord_x,utilisateurs.coord_y,utilisateurs.coord_z,madistance) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +36 (36 votes) |
|
Posté le 18 mars 2017 - 06:39 |
Bonjour,
Je ne comprends pas bien ce que la fonction géoSuiviActive fait là dedans...
Cette fonction était une nouveauté de la 21 utilisée pour un suivi en arrière plan avec une faible précision voire très mauvaise. Je ne pense pas que le mélange des 2 techniques soit judicieux...
https://doc.pcsoft.fr/fr-FR/?1000019277&product=WM
Un petit truc pour le test : SI pos.Latitude <> 0 ET pos.Longitude <> 0 ALORS, je mettrais _ET_ plutôt que ET. C'est pas grand chose mas c'est de l'optimisation. Si la latitude = 0 alors le test se termine immédiatement sans chercher à tester la longitude...
Merci pour le petit cadeau. Cela peut-être utile.
Cdlt - Eric.
-- Eric DELATTRE http://www.yoosite.frMessage modifié, 18 mars 2017 - 06:41 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 77 messages |
|
Posté le 07 février 2018 - 20:30 |
Bonjour, je déterre le sujet mais moi aussi sur android c'est très lent et on atteint même le timeout par défaut de temps en temps même cela fonctionne très mal Et ce même sur un code ultra simple pour test:
Clic sur le bouton:
maPosition est une géoPosition maPosition= GPSRécupèrePosition()
Et dans un thread secondaire persistant appelé par un timer toutes les minutes.... ben du coup ça revoie 0.000 , 0.000 car trop long!!!
Ca fonctionne qu'une fois sur 2 et c'est ultra lent!!! pas de retour de PCSOFT ? Je suis très en colère qu'une fonction basique comme celle ci ne fonctionne pas.( apparemment pas de code particulier à faire sur Android).. 2000€ la licence j'ai les boules... Pour récupérer une position toutes les minutes en dans un threadpersistant je galère c'est quand même incroyable!!! Je ne suis pas le seul apparemment, quelqu'un a t il une solution? J’attends une réponse de PCSOFT... mais rien pour l'instant
Cordialement julien |
| |
| |
| | | |
|
| | |
| |
Posté le 07 février 2018 - 22:52 |
Salut Julien, Actuellement sur Android il y a selon les Puces le plus courament GPS(États-Unis), Assisted GPS, ou A-GPS(Wifi ou Data Mobiles) et GLONASS(Russe) Bientôt il y aura Galileo(europeen), Beidou-2(Chine), IRNSS(Inde) ou QZSS(Japon)
En java il existe https://developer.android.com/reference/android/location/GpsStatus.html…() qui determine le temps nécessaire pour déterminer la premiere localisation
Il faut savoir que le A-GPS est le plus rapide, le plus courant mais moins précis il existe une propriété ..Valide pour vérifier que la localisation a était déterminée de façon correcte il existe une application https://play.google.com/store/apps/details…
Je te conseil de lire http://developer.sonymobile.com/knowledge-base/technologies/glonass/
Le mieux est donc de vérifier l’état du gps, du réseau wifi et data dans un premier temps initialiser en réseau la géolocalisation puis si tu a besoin de plus de précision d'initialiser en satellite (tu remarquera que souvent en satellite tu n'as pas de position valide car peu d'appareils ont réellement cette option) |
| |
| |
| | | |
|
| | |
| |
Posté le 07 février 2018 - 23:09 |
J'ai oublier d'ajouter que selon les puces certaines ne fonctionne pas en intérieur mais seulement en extérieur |
| |
| |
| | | |
|
| | |
| |
Posté le 08 février 2018 - 09:34 |
Julien DETO a écrit :
Bonjour, je déterre le sujet mais moi aussi sur android c'est très lent et on atteint même le timeout par défaut de temps en temps même cela fonctionne très mal Et ce même sur un code ultra simple pour test:
Clic sur le bouton:
maPosition est une géoPosition maPosition= GPSRécupèrePosition()
Et dans un thread secondaire persistant appelé par un timer toutes les minutes.... ben du coup ça revoie 0.000 , 0.000 car trop long!!!
Ca fonctionne qu'une fois sur 2 et c'est ultra lent!!! pas de retour de PCSOFT ? Je suis très en colère qu'une fonction basique comme celle ci ne fonctionne pas.( apparemment pas de code particulier à faire sur Android).. 2000€ la licence j'ai les boules... Pour récupérer une position toutes les minutes en dans un threadpersistant je galère c'est quand même incroyable!!! Je ne suis pas le seul apparemment, quelqu'un a t il une solution? J’attends une réponse de PCSOFT... mais rien pour l'instant
Cordialement julien
C'est probablement parce que vous testez la fonction depuis votre bureau donc en intérieur. Et il est probable que le signal GPS passe mal dans ce cas. Cela peut venir aussi du paramétrage que vous avez choisi dans GPSInitParametre (localisation précise ou non). |
| |
| |
| | | |
|
| | |
| |
Posté le 08 février 2018 - 11:05 |
Bonjour et merci pour vos réponses. Je précise un peu mon problème: Dans l'initialisation du projet: ********* *initgpsparametres en auto, précision élevée, énergie élevé.
Threadexecute.(procthread) Threadpersistant avec notification associée pour exécuter en tâche de fond
***********
*procthread()
Procedure interne envoi() Maposition est une geoposition Maposition = gpsrecupereposition(30 s) Si erreurdetectee = faux alors Fichierdonneeserveur. Lat=Maposition..latitude Fichierdonneeserveur. Long=Maposition..longitude Fin Fin
Timersys(envoi, 60 s)
varenvie est un booleen=vrai Tantque varenvie alors . . . Si condition arrêt alors varenvie=faux Fin Fin
A ce stade lorsque que l'application est ouverte en premier plan ou en arrière plan j'ai bien une prise de position toutes les minutes. Même si l'effet bloquant de gpsrecupereposition en premier plan avec le sablier immobilise l'application ce qui est pénible faudra trouver une solution mais c'est un autre probleme. Je peux même fermer la fenêtre cela fonctionne toujours à la minute grâce au Threadpersistant quand j'utilise le téléphone... Pas en veille Mais quand le téléphone passe en veille je n'ai que prise de position toutes les 5 ou 6 minutes !!! Je ne sais pas l'expliquer. . Je précise que je ne veux pas utiliser geosuiviprocedure qui est imprécise et timing aléatoire en fonction de la vitesse et de la position et gpssuitdeplacement nécessite premier plan et consomme beaucoup trop de batterie. J'ai juste besoin de prendre un point toute les minutes en tâche de fond sans condition de vitesse de déplacement ou autre... Merci d'avance Cdlt Julien. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 77 messages |
|
Posté le 08 février 2018 - 11:09 |
Bonjour et merci pour vos réponses. Je précise un peu mon problème: Dans l'initialisation du projet: ********* *initgpsparametres en auto, précision élevée, énergie élevé.
Threadexecute.(procthread) Threadpersistant avec notification associée pour exécuter en tâche de fond
***********
*procthread()
Procedure interne envoi() Maposition est une geoposition Maposition = gpsrecupereposition(30 s) Si erreurdetectee = faux alors Fichierdonneeserveur. Lat=Maposition..latitude Fichierdonneeserveur. Long=Maposition..longitude Fin Fin
Timersys(envoi, 60 s)
varenvie est un booleen=vrai Tantque varenvie alors . . . Si condition arrêt alors varenvie=faux Fin Fin
A ce stade lorsque que l'application est ouverte en premier plan ou en arrière plan j'ai bien une prise de position toutes les minutes. Même si l'effet bloquant de gpsrecupereposition en premier plan avec le sablier immobilise l'application ce qui est pénible faudra trouver une solution mais c'est un autre probleme. Je peux même fermer la fenêtre cela fonctionne toujours à la minute grâce au Threadpersistant quand j'utilise le téléphone... Pas en veille Mais quand le téléphone passe en veille je n'ai que prise de position toutes les 5 ou 6 minutes !!! Je ne sais pas l'expliquer. . Je précise que je ne veux pas utiliser geosuiviprocedure qui est imprécise et timing aléatoire en fonction de la vitesse et de la position et gpssuitdeplacement nécessite premier plan et consomme beaucoup trop de batterie. J'ai juste besoin de prendre un point toute les minutes en tâche de fond sans condition de vitesse de déplacement ou autre... Merci d'avance Cdlt Julien
-- Debutant |
| |
| |
| | | |
|
| | |
| |
Posté le 08 février 2018 - 12:21 |
Vous pouvez déjà utiliser la fonction GPSDernièrePosition à l'ouverture de l'application pour récupérer la dernière position connue (c'est ce que fait Google Maps). Son exécution est immédiate.
Apres je ne sais pas ce que vous voulez faire mais si vous voulez suivre avec précision la position de l'appareil, il faut utiliser la fonction GPSSuitDéplacement.
NB : il est normal d'avoir moins de notification de position lorsque le téléphone est en veille car l'os réduit considérablement les fonctions de géolocalisation pour économiser la batterie. |
| |
| |
| | | |
|
| | |
| |
Posté le 14 février 2018 - 15:22 |
Bjr,
Dans son message précédent, Julien DETO a écrit :
Bonjour et merci pour vos réponses. Je précise un peu mon problème: Dans l'initialisation du projet: ********* *initgpsparametres en auto, précision élevée, énergie élevé.
Threadexecute.(procthread) Threadpersistant avec notification associée pour exécuter en tâche de fond
***********
*procthread()
Procedure interne envoi() Maposition est une geoposition Maposition = gpsrecupereposition(30 s) Si erreurdetectee = faux alors Fichierdonneeserveur. Lat=Maposition..latitude Fichierdonneeserveur. Long=Maposition..longitude Fin Fin
Timersys(envoi, 60 s)
varenvie est un booleen=vrai Tantque varenvie alors . . . Si condition arrêt alors varenvie=faux Fin Fin
A ce stade lorsque que l'application est ouverte en premier plan ou en arrière plan j'ai bien une prise de position toutes les minutes. Même si l'effet bloquant de gpsrecupereposition en premier plan avec le sablier immobilise l'application ce qui est pénible faudra trouver une solution mais c'est un autre probleme. Je peux même fermer la fenêtre cela fonctionne toujours à la minute grâce au Threadpersistant quand j'utilise le téléphone... Pas en veille Mais quand le téléphone passe en veille je n'ai que prise de position toutes les 5 ou 6 minutes !!! Je ne sais pas l'expliquer. . Je précise que je ne veux pas utiliser geosuiviprocedure qui est imprécise et timing aléatoire en fonction de la vitesse et de la position et gpssuitdeplacement nécessite premier plan et consomme beaucoup trop de batterie. J'ai juste besoin de prendre un point toute les minutes en tâche de fond sans condition de vitesse de déplacement ou autre... Merci d'avance Cdlt Julien
Si tu es avec de l'android 7 ou 8 il faut preciser que tu ne veux pas d'economie d'energie pour ton appli. Peut etre ca ira mieux.
a plus
-- ------------------------------------------------------------- www.ctc-soft.com Gestion biblo-documentaire (free-share) Comptabilité shareware Logiciels de Gestion de saisie terrain Spécialisé Tournées de boulangers ------------------------------------------------------------- |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 77 messages |
|
Posté le 14 février 2018 - 16:05 |
Merci oui mais dans le code ? Car au niveau réglage téléphone j'ai tout vérifié il n'y a pas de mode économique sur mon appli |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 571 messages Popularité : +222 (260 votes) |
|
Posté le 15 février 2018 - 04:31 |
Bonjour,
Je suis dans le même cas que Julien, je trouve la fonction d'une lenteur incroyable. A croire qu'il attend le timeout pour renvoyer une info. Et de temps ça ne récupère même pas la position. Une véritable catastrophe.
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 77 messages |
|
Posté le 15 février 2018 - 08:41 |
Salut j'ai un peu réglé le problème de la lenteur, et empêché d'immobiliser la fenêtre principale, je te ferai parvenir l'information. Par contre très toujours pas de réponse de pc soft pour la veille sur batterie... Je prends bien un point toutes les minutes en premier plan en arrière plan et ce même fenêtre de l'application fermee et en veille uniquement sur secteur mais sur Batterie et en veille la prise de points se fait toutes les 5 ou 10 ou 15 min !!!! Incompréhensible !!! Ils me renvoient toujours sur leur 2 fonction de suivi qui ne correspondent pas à mon besoin... J'espère avoir l'information pour la partager sur ce forum car je suis loin d'être le seul dans ce cas. Etucun réglage possible sous Android.... Android |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 217 messages Popularité : +12 (12 votes) |
|
Posté le 15 février 2018 - 09:02 |
Bonjour, Le probleme de lenteur d'acquisition m'intéresse aussi. Comment avez-vous procédé Julien? |
| |
| |
| | | |
|
| | |
| |
Posté le 15 février 2018 - 09:10 |
Si le but recherché c'est de récupérer la position de l'appareil toutes les minutes que l'application soit en arrière plan ou pas, l'appareil en veille ou pas ce n'est tout simplement pas possible et en particulier sur les téléphones les plus récents l'os limitant considérablement les fonctionnalités de géolocalisation. Je vous invite à lire cet article à ce sujet : https://developer.android.com/about/versions/oreo/background-location-limits.html
D'après les essais que j'ai effectué (que ce soit avec WM ou Android Studio), lorsque l'application est au premier plan je reçois une position régulière si le téléphone n'est pas en économie d'énergie et surtout si je suis en extérieur. Des que l'application passe en arrière plan ou pire si l'appareil est en veille, la fréquence des positions reçues est beaucoup plus espacé (plusieurs minutes). |
| |
| |
| | | |
|
| | |