LocationManager: le “réseau” fournisseur de toujours activé?
Je veux sélectionner un LocationProvider qui est activé dans Android. Le projet de construction de la cible est sous Android 2.1.
C'est ce que je fais dans onCreate().
//...
LocationManager locationMgr = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.NO_REQUIREMENT);
criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
criteria.setCostAllowed(false);
String bestProvider = locationMgr.getBestProvider(criteria, true);
Toast.makeText(getApplicationContext(), "Provider = " + bestProvider + " enabled= " + locationMgr.isProviderEnabled(bestProvider), Toast.LENGTH_LONG).show();
//...
Maintenant, je passe à chaque interface réseau hors tension et réglez le mode avion sur mon téléphone (HTC Desire, Android 2.2). J'ai débrancher le périphérique USB. Il n'y a clairement pas de fournisseur de vivant qui pourraient fournir des données de localisation de l'appareil. J'ai demander spécifiquement getBestProvider pour activé les fournisseurs seulement, donc je m'attends à retourner la valeur null ou une chaîne vide dans ce cas. J'attends isProviderEnabled de fausse déclaration.
Le résultat réel est que getBestProvider renvoie "réseau" et isProviderEnabled rapports pour être "activé". Est "réseau" toujours activé", même lorsqu'elle n'est pas?
- Cela peut aussi être causée par Android le cache d'emplacement réseau, car il est peu probable à changer rapidement en raison de la granularité grossière. C'est juste une supposition bien.
Vous devez vous connecter pour publier un commentaire.
Après quelques recherches, je peux répondre à ma propre question. J'ai d'abord essayé en mode avion avec:
La ConnectivityManager rapports correctement "faux" car il n'existe pas de connexion. C'est utile pour vérifier si vous avez réellement un réseau et, par conséquent, un réseau à base de fournisseur d'emplacement disponible. Ensuite, j'ai pris un deuxième coup d'oeil à mes paramètres de l'appareil. Et voici la réponse:
rapports si l'utilisateur a coché le dispositif de réglage (dans mon cas, en vertu de Emplacement - Ma Localisation). Si vous décochez la case tous les fournisseurs de là il n'y est de retour null comme prévu. Il est documentée dans isProviderEnabled() mais j'ai oublié . L'affaire est close.
isProviderEnabled()
doit retourner false dans cet exemple, non? Vous ne pouvez pas avoir une méthode avec une primitive de type de retour qui renvoie la valeur null. Peut-être vous diregetBestProvider()
?isProviderEnabled(LocationManager.NETWORK_PROVIDER)
renvoie toujours VRAI.Essayer cette
Vous obtenez toujours vrai, comme réponse, parce que vous avez sélectionné l'option "Utiliser les réseaux" option dans le menu paramètres. J'ai aussi eu ce problème jusqu'à ce que je la trouve. J'espère que vous trouverez ce utile.