48 votes

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 de s'appuyer sur un emplacement réseau, il me donne rassis résultats -- dans ce cas, il y a deux jours. Je n'arrive pas à mettre à jour. L'appel de getLastKnownLocation renvoie la même rassis résultats.

Google Maps mises à jour très bien, si je sais que c'est pas un matériel/problème de configuration du système.

J'ai Googlé autour, et a trouvé un peu les gens avec des problèmes similaires, mais pas de réponses. J'ai essayé de cibler mon projet à l'API de niveau 8 (2.2) et 15 (4.0.3). Mêmes résultats. Mon téléphone est sous ICS.

J'ai aussi essayé de supprimer la demande de GPS_PROVIDER, ainsi qu'y compris les demandes de tout dans getAllProviders(). Même affaire.

Aucune idée pourquoi NETWORK_PROVIDER n'est pas mise à jour? Toute aide serait grandement appréciée.

(P. S. Non, je n'ai pas j'ai l'habitude d'utiliser "1, 1" que le temps me/paramètres de distance; j'ai juste changé pendant le débogage à ce sujet).

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

23voto

NumberFour Points 876

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

Dans mon cas sur le Galaxy S3 Mini, il y avait des symptômes similaires (pas d'emplacement des mises à jour jusqu'au redémarrage...) tels que ceux décrits ci-dessus. Emplacement dans la plupart des cas cessé les mises à jour lorsque l'appareil atteint une faible puissance, mais parfois, il vient de se passer, même lorsque le téléphone est complètement chargée. C'est évidemment un problème quelque part en LocationManager. J'ai réussi à contourner LocationManager par l'aide de la " Google Play Services de l'API pour les emplacements (LocationClient de la classe).

C'est probablement la raison pour laquelle l'emplacement des mises à jour à toujours travailler avec Google Maps, parce que Google Maps ont été à l'aide de Google Play Services de l'API avant même qu'elle ait été rendue publique.

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

Im emplacement des mises à jour avec le Jeu de Services et il n'y avait absolument pas de problèmes comme ça - je continuer à recevoir régulièrement de l'emplacement des mises à jour à tout moment.

Méfiez-vous que cela va exiger que l'utilisateur doit disposer de Google Play installé sur leur appareil, de sorte qu'il Suscite et les autres seront hors de l'image. Il exige aussi un minimum d'Android 2.2.

1voto

mborsuk Points 476

Je vois cela aussi actuellement sur certains appareils (S3 et One X). Lorsqu'il entre dans cet état, la seule chose qui le sort est de redémarrer le périphérique.

Pouvez-vous me dire si l'emplacement fonctionne pour d'autres applications sur votre appareil et si le redémarrage corrige votre appareil pour l'instant?

Je mettrai à jour ici avec plus d'informations que je découvre les choses.

0voto

Peterdk Points 4848

Je soupçonne actuellement que cela est dû à l’absence d’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 pas résolu le problème malheureusement.

0voto

knagode Points 1176

Si vous travaillez sur un nouveau téléphone, vous devez vérifier si vous avez accepté tous les accords de Google Maps app. Dans le cas contraire, vous ne recevrez aucune mise à jour de NETWORK_PROVIDER.

-1voto

ashish Points 300

1) d’abord, vous vérifiez si vous avez donné l’autorisation suggérée ci-dessus. 2) vous devez vous assurer que l’Internet fonctionne dans votre appareil. 3) s'il vous plaît 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();

        }
    });     

}`
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X