web-dev-qa-db-fra.com

NETWORK_PROVIDER ne fournissant pas les emplacements mis à jour

LocationManager locationManager = (LocationManager)getApp().getSystemService(Context.LOCATION_SERVICE); //getApp() returns my Application object
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER , 1, 1, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1, 1, this);

C'est le code que j'utilise pour écouter. Avec le GPS activé, tout fonctionne bien. Cependant, si je désactive le GPS et que je me fie à la localisation du réseau, les résultats sont obsolètes - dans ce cas, il y a deux jours. Je n'arrive pas à le mettre à jour. L'appel de getLastKnownLocation renvoie les mêmes résultats périmés.

Les mises à jour de Google Maps sont correctes, je sais donc que ce n'est pas un problème de configuration matériel/système.

J'ai cherché sur Google et trouvé quelques personnes avec des problèmes similaires, mais pas de réponses. J'ai essayé de cibler mon projet au niveau 8 (2.2) et 15 (4.0.3) de l'API. Même résultat. Mon téléphone fonctionne avec ICS.

J'ai également essayé de supprimer la demande de GPS_PROVIDER, ainsi que d'inclure des demandes pour tout dans getAllProviders (). Même affaire.

Avez-vous une idée de la raison pour laquelle NETWORK_PROVIDER n'est pas mis à jour? Toute aide serait grandement appréciée.

(P.S. Non, je n'utilise normalement pas "1, 1" comme paramètres de temps/distance; je viens de le changer lors du débogage.)

EDIT: J'ai oublié de mentionner que oui, isProviderEnabled () renvoie true.

47
hersh

J'ai enfin trouvé un moyen de résoudre ce problème (voir ma question ici ).

Dans mon cas sur S3 Galaxy Mini, des symptômes similaires (ceux décrits plus haut) (aucune mise à jour d'emplacement avant le redémarrage ...). Dans la plupart des cas, l'emplacement a cessé de se mettre à jour lorsque le périphérique a atteint une alimentation faible, mais parfois, cela se produisait même lorsque le téléphone était complètement chargé ... Il est évident que c'est un problème quelque part dans la LocationManager. J'ai réussi à contourner LocationManager en utilisant la nouvelle API des services Google Play pour les emplacements (classe LocationClient). 

C'est probablement la raison pour laquelle les mises à jour de localisation fonctionnaient toujours avec Google Maps, car Google Maps utilisait déjà l'API des services de Google Play avant même qu'elle ne soit rendue publique.

Je vous recommande de suivre ce lien qui montre comment utiliser l'API Play Services pour obtenir des emplacements au lieu d'utiliser LocationManager si vous rencontrez ce problème.

J'exécute des mises à jour d'emplacement avec Play Services et il n'y a plus aucun problème comme celui-ci. Je reçois des mises à jour d'emplacement régulières à tout moment.

Attention, cela nécessitera que l'utilisateur ait installé Google Play sur son appareil. Par conséquent, Kindles, etc., ne sera plus sur la photo. Il nécessite également un minimum d'Android 2.2.

23
NumberFour

Si vous travaillez sur un nouveau téléphone, vous devez vérifier si vous avez accepté tous les accords de l'application Google Maps - sinon vous ne recevrez aucune mise à jour de NETWORK_PROVIDER.

0
knagode

Je soupçonne actuellement que cela est dû à la non-utilisation de removeUpdates(listener) lors de l’arrêt de l’application ou de l’activité ondestroy. Je me suis assuré de le mettre en œuvre et j'espère que cela le réglera. Je ne peux penser à rien d'autre.

--edit -- Cela n'a malheureusement pas résolu le problème.

0
Peterdk

1) d’abord, vérifiez que vous avez bien donné l’autorisation suggérée ci-dessus . 2) vous devez vous assurer que l’Internet fonctionne dans votre appareil . 3) veuillez trouver le code ci-dessous.

public void getLocationByNetworkProvider()
{       
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 10, new LocationListener() {
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub


        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onLocationChanged(Location location) {
         location.getLatitude();                                location.getLongitude();

        }
    });     

}`
0
User10001