Comment puis-je vérifier le statut actuel de l'récepteur GPS?
Comment puis-je vérifier le statut actuel de l'récepteur GPS? J'ai déjà vérifié la LocationListener
onStatusChanged
méthode mais de toute façon, il semble que n'est pas de travail, ou tout simplement le mal de possibilité.
Fondamentalement, j'ai juste besoin de savoir si le GPS icône en haut de l'écran clignote (pas de correction) ou solide (correctif est disponible).
Vous devez vous connecter pour publier un commentaire.
En tant que développeur de SpeedView: compteur de vitesse GPS pour Android, j'ai essayé toutes les solutions possibles à ce problème, tous avec le même résultat négatif. Rappelons ce qui ne fonctionne pas:
Voici donc la seule solution que j'ai trouvé, et celui que j'utilise dans mon application. Disons que nous avons cette simple classe qui implémente l'GpsStatus.Auditeur:
OK, maintenant dans onLocationChanged() on ajoute ce qui suit:
Et c'est tout. Fondamentalement, c'est la ligne qui fait tout:
Vous pouvez modifier les millis valeur bien sûr, mais je suggère de définir autour de 3 à 5 secondes.
Cela fonctionne et même si je n'ai pas regardé le code source qui attire le natif de l'icône GPS, c'est près de la réplication de son comportement. Espérons que cela aide quelqu'un.
mLastLocationMillis
a été mis par une source autre que le GPS? Le système serait que de réclamer queisGPSFix
est vrai, mais en réalité, c'est juste aucun fix (peut-être l'un à partir du réseau téléphonique)GpsStatus.Listener
semble être obsolète; est-il un jour?onLocationChanged
n'est jamais appelé... je ne peux faire les mises à jour via le google play services fusionnés emplacement de l'api, qui n'est manifestement pas utile pour déterminer si oui ou non le gps est disponible. Toutes les idées de comment résoudre ce problème?L'icône GPS semble changer d'état en fonction reçoit une émission intentions. Vous pouvez changer d'état, vous-même avec les exemples de code suivants:
Informer que le GPS a été activé:
Informer que le GPS reçoit les corrections:
Informer que le GPS ne reçoit plus de correctifs:
Informer que le GPS a été désactivé:
Exemple de code pour vous inscrire récepteur aux intentions de:
Par la réception de ces diffusion intentions, vous pouvez remarquer les changements dans l'état du GPS. Cependant, vous serez avisé que lorsque les changements d'état. Il n'est donc pas possible de déterminer l'état actuel de l'utilisation de ces intentions.
nouveau membre donc, malheureusement, im pas en mesure de commenter ou voter, mais Stephen Daye du post ci-dessus est la solution parfaite pour exactement le même problème que j'ai été chercher de l'aide.
une petite modification à la ligne suivante:
à:
fondamentalement comme im la construction d'un lent rythme de jeu et mon intervalle de mise à jour est déjà réglé à 5 secondes, une fois que le signal gps est de plus de 10 secondes, c'est le bon moment pour déclencher quelque chose.
cheers mate, on a dépensé environ 10 heures à essayer de résoudre cette solution avant que je trouve votre post 🙂
Ok, nous allons donc essayer une combinaison de toutes les réponses et les mises à jour jusqu'à présent et de faire quelque chose comme ceci:
ACCESS_FINE_LOCATION
la permission de votre manifesteLocationManager
GpsStatus.Écouteur
qui réagit àGPS_EVENT_SATELLITE_STATUS
LocationManager
avecaddGpsStatusListener
Le GPS auditeur pourrait être quelque chose comme ceci:
Les Api sont un peu confus au sujet de quand et quel GPS par satellite et d'information est donné, mais je pense que l'idée serait de regarder combien de satellites sont disponibles. Si c'est en dessous de trois, alors vous ne pouvez pas avoir un correctif. Si c'est plus, alors vous devriez avoir un correctif.
Essai et l'erreur est probablement la voie à suivre pour déterminer combien de fois Android rapports satellite info, et quelles sont les informations à chaque
GpsSatellite
objet contient.GpsSatellite
objet.LocationManager.requestLocationUpdates
avec le temps et la distance les paramètres à 0? Que doit vous envoyer un GPS correctifs dès qu'ils se produisent. Si vous n'êtes pas à recevoir quoi que ce soit, alors vous avez probablement n'avez pas de fixer. Vous pouvez combiner cela avec le statut d'auditeur ci-dessus si vous le souhaitez.Après quelques années de travail avec le GPS sous windows mobile, j'ai réalisé que le concept de "perdre" un GPS peut être subjective. Pour simplement écouter ce que le GPS vous indique, l'ajout d'un NMEAListener et l'analyse de la phrase vous dira si le correctif a été "valide" ou pas. Voir http://www.gpsinformation.org/dale/nmea.htm#GGA . Malheureusement avec quelques GPSes cette valeur fluctue en arrière et en avant, même pendant le cours normal de l'exploitation dans une "bonne correction" de la zone.
L'autre solution est de comparer l'heure UTC de la position GPS contre le téléphone est temps (converti à l'UTC). Si elles sont d'une certaine différence de temps d'intervalle, vous pouvez supposer que vous avez perdu la position GPS.
entrer dans un problème similaire, tout en travaillant sur ma maîtrise du projet, il semble que Daye, en réponse à tort déclaré "pas de solution", tandis que l'appareil reste dans un emplacement statique. J'ai modifié la solution, juste un peu, ce qui semble bien fonctionner pour moi, dans un emplacement statique. Je ne sais pas comment le serait-il affecter la batterie n'est pas ma principale préoccupation, mais voici comment je l'ai fait en re-demande d'emplacement des mises à jour quand un correctif a expiré.
Bien, en mettant ensemble tous les travail approche permettra de cela (qui traite aussi obsolète
GpsStatus.Listener
):Note: cette réponse est une combinaison des réponses ci-dessus.
Si vous avez juste besoin de savoir si il y a un correctif, puis recherchez le dernier emplacement connu fournie par le récepteur GPS et vérifier l' .getTime() valeur à savoir quel est l'âge que. Si c'est assez récent (comme... quelques secondes), vous disposez d'un correctif.
... et, enfin, de la comparer à la date actuelle heure (UTC!). Si c'est assez récent, vous avez un correctif.
Je faire dans mon app et c'est très bien.
Vous pouvez essayer d'utiliser LocationManager.addGpsStatusListener mis à jour lorsque le GPS changements d'état. Il ressemble à GPS_EVENT_STARTED et GPS_EVENT_STOPPED peut-être ce que vous cherchez.
GPS_EVENT_FIRST_FIX
sonne comme un plus étroit.J'ai peut-être tort, mais il semble que les gens semblent vivre hors-sujet pour
Qui se fait facilement avec
Pour voir si vous avez une solide correction, les choses deviennent un peu plus compliqué:
Maintenant, chaque fois que vous voulez voir si vous avez fix?
Si vous voulez être de fantaisie que vous pouvez toujours avoir un délai d'attente à l'aide du Système.currentTimeMillis() et loc.getTime()
Fonctionne de manière fiable, au moins sur un N1 depuis 2.1.
Avec LocationManager vous pouvez getLastKnownLocation() après vous getBestProvider().
Cela vous donne l'Emplacement de l'objet, qui a les méthodes getAccuracy() en mètres et getTime() UTC millisecondes
Est-ce à vous donner assez d'informations?
Ou peut-être vous pouvez effectuer une itération sur les LocationProviders et de savoir si chacun meetsCriteria( ACCURACY_COARSE )
nombreux postes...
l'ajout de ce code, avec addGpsListener...
showMessageDialog ... juste affiche une boîte de dialogue standard de la fenêtre avec la chaîne
fait le travail parfaitement pour moi 🙂
merci beaucoup :=) (sry pour ce post, pas encore en mesure de voter)
Si vous n'avez pas besoin d'une mise à jour sur le même instant, le correctif est perdu, vous pouvez modifier la solution de Stephen Daye dans une manière que vous avez une méthode qui vérifie si le correctif est toujours présent.
De sorte que vous pouvez vérifier chaque fois que vous avez besoin de quelques données GPS et et vous n'avez pas besoin que GpsStatus.Auditeur.
Le "global", les variables sont:
C'est la méthode qui est appelée dans "onLocationChanged()" pour rappeler la mise à jour de l'heure et de l'emplacement actuel. A côté de cela, il met à jour "isGpsFix":
Cette méthode est appelée à chaque fois que j'ai besoin de savoir si il y a un point GPS:
Dans mon application j'ai d'abord exécuter checkGpsFix() et si le résultat est vrai que j'ai utiliser la variable "lastKnownLocation" comme ma position actuelle.
Je sais que c'est un peu tard. Cependant pourquoi ne pas utiliser le NMEAListener si vous voulez savoir si vous avez une solution. De ce que j'ai lu, la NMEAListener vous donnera les phrases NMEA et à partir de là, vous choisissez la bonne phrase.
La CMR phrase contient le correctif statut qui est, soit Un pour OK ou V pour avertissement. La GGA phrase contient le Corrigé de la Qualité (0 invalide, 1 GPS ou 2 DGPS)
Je ne peux pas vous offrir tout le code java comme je ne suis débutant avec Android, mais j'ai fait un GPS bibliothèque en C# pour Windows apps, je suis à la recherche pour une utilisation avec Xamarin. Je ne suis tombé sur ce fil parce que je cherchais des informations sur le fournisseur.
De ce que j'ai lu jusqu'à présent sur l'Emplacement de l'objet je ne suis pas du tout à l'aise sur les méthodes comme getAccuracy() et hasAccuracy(). Je suis utilisé pour l'extraction de la phrases NMEA HDOP et VDOP valeurs pour déterminer le degré de précision de mes corrections sont. Il est assez courant d'avoir un correctif, mais ont une moche HDOP ce qui signifie que votre précision horizontale n'est pas très bon du tout. Par exemple assis à votre bureau de débogage avec un GPS Bluetooth externe dur de l'appareil contre une fenêtre, vous êtes très probablement obtenir un correctif, mais de mauvaise HDOP et VDOP. Placez votre appareil GPS dans un pot de fleurs à l'extérieur ou quelque chose de similaire ou ajouter une antenne extérieure pour le GPS et immédiatement, vous obtenez une bonne valeur HDOP et VDOP valeurs.
C'est peut-être la meilleure possibilité de créer un TimerTask qui définit la location reçu à une certaine valeur (null?) régulièrement.
Si une nouvelle valeur est reçue par le GPSListener il va mettre à jour l'emplacement avec les données actuelles.
Je pense que ce serait une solution de travail.
Vous dire que vous avez déjà essayé de onStatusChanged(), mais qui ne fonctionne pas pour moi.
Voici la méthode que j'utilise (j'ai laissé la classe elle-même la poignée de la onStatusChanged):
Et je me charge du onStatusChanged comme suit:
Noter que le onProvider{Dis,Fr}handicapées() sont les méthodes sur l'activation et la désactivation de suivi GPS par l'utilisateur; non pas ce que vous cherchez.
Réglage de l'intervalle de temps pour vérifier correctif n'est pas un bon choix.. j'ai remarqué que onLocationChanged n'est pas appelée si vous n'êtes pas en train.. ce qui est compréhensible car l'emplacement n'est pas en train de changer 🙂
Meilleur moyen serait par exemple:
si l'emplacement est vraiment disponible, si ce n'est pas vous avez probablement perdu emplacement