2011-07-21 3 views
1

J'utilise ce code pour obtenir le fournisseur de localisation et l'emplacement.Android Lieu Wifi ne fonctionne pas après le redémarrage

 mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     mBestProvider = mLocationManager.getBestProvider(criteria, false); 
     mLocation = mLocationManager.getLastKnownLocation(mBestProvider); 

Si j'éteins le GPS, l'emplacement est par le réseau, mais si je redémarre le téléphone (donc je perte de la dernière position connue) et avec les connexions de données 3G au large. Donc, je n'utilise que le WIFI, je ne peux pas obtenir un fournisseur donc donc n'importe quel endroit. Cependant, l'application google place peut me localiser. Je pense que cela pourrait être la dernière adresse connue. Mais dans ce cas, mes autres applications devraient être en mesure d'obtenir cet emplacement. Une idée de ce qui se passe?

Répondre

3

La façon dont vous l'appelez cela retournera tous les fournisseurs activés ou non parce que vous le transmettez faux ce qui est probablement votre intention mais avez-vous vérifié la chaîne de retour?

mBestProvider = mLocationManager.getBestProvider(criteria, false); 

Vous pourriez obtenir le fournisseur de GPS, ou vous pourriez obtenir le fournisseur de réseau, j'ai appris à ne pas faire confiance au mécanisme de critères, car il semble fonctionner différemment par transporteur et le dispositif (j'ai eu quelques bugs étranges signalé à cause de cela) Donc je demande toujours spécifiquement gps et les fournisseurs de réseau et de vérifier la dernière connue pour les deux, puis utilisez un algo pour déterminer le meilleur à utiliser.

Le fournisseur de réseau peut utiliser la cellule ou hotspot wifi/routeurs pour déterminer l'emplacement (Google conserve une base de données wifi) il est donc possible d'obtenir une solution avec juste wifi, ne dis pas qui est ce qu'il se passe mais il pourrait être .

Si cela ne porte aucun fruit, il est possible qu'ils cachent simplement la dernière mise à jour de l'emplacement dans les préférences, certaines applications le font. Pour tester la thèse, à défaut de tout ce qui précède, il suffit de laisser le téléphone dans cet état et de déplacer vers un endroit très différent avec les mêmes propriétés si possible, ne devrait prendre que 2000 mètres environ. Si votre application signale toujours les adresses null et les adresses de l'ancien emplacement, vous avez votre réponse. Si les lieux ont rapporté l'emplacement le plus récent avec le wifi, et que votre application ne le peut pas (en supposant que vous vérifiez réellement que vous obtenez le fournisseur du réseau), il est possible qu'ils utilisent une API privée via Google Location Server (GLS)/Serveur MASF via des informations partielles de cellules/wifi mais c'est à l'extrémité de la courbe de feuille d'étain.

+0

J'ai ajouté une condition pour définir NETWORK_PROVIDER dans le cas où le mécanisme de critères ne renvoie rien, et quand j'utilise mLocation = mLocationManager.getLastKnownLocation (mBestProvider) je n'obtiens aucun résultat. Donc, je ne peux pas obtenir n'importe quelle position. Je vais faire le test que vous avez dit, car je pense qu'ils stockent probablement dans les préférences la position. – Dayerman

+0

ni les fournisseurs GPS/NETWORK/PASSIVE ne retournent rien. J'ai fait un test: Désactiver le WIFI et supprimer les données de cache/application de l'application des lieux. Quand j'ouvre à nouveau des endroits, il dit "Requiere a Data Connection", j'allume à nouveau le WIFI, puis apparaît position avec 50mètres de précision. Cela signifie-t-il qu'ils utilisent une deuxième API "secrète"? Cause avec le WIFI sur et manuellement défini NEWTWORK_PROVIDER je n'ai rien. – Dayerman

+0

@dayerman Avez-vous essayé d'installer un programme d'écoute de localisation, etc. avec le fournisseur de réseau? La propriété getLastLocation peut renvoyer une valeur nulle mais toujours signaler les mises à jour d'emplacement à un programme d'écoute enregistré, il se peut qu'ils ne reçoivent que des mises à jour réelles. Si vous ne le faites pas, je pense que c'est une indication que quelque chose d'autre se passe, mais je le vérifierais en premier. – Idistic

Questions connexes