2010-10-26 3 views
0

Je développe une application de cartographie en utilisant Eclipse 3.5.Pourquoi l'heure de mise à jour minimale de Location Manager est-elle remplacée lorsque l'emplacement change?

Je définis la période de mise à jour minimale avec la méthode requestLocationUpdates de LocationManager, via une activité de configuration. Lorsque je définis la propriété, je vois dans Logcat que le processus système définit la valeur OK. Lorsque j'émette un nouvel emplacement à partir du contrôle de l'émulateur DDMS et que l'emplacement change sur l'affichage de la carte, je vois que le processus système fixe alors le temps minimum à zéro.

Vous trouverez ci-dessous une capture des messages du journal du système. Vous pouvez voir que je règle la période à 32 secondes, puis 16, puis, après avoir envoyé un changement d'emplacement simulé, le système le met à zéro

La carte répond aux changements d'emplacement à l'emplacement change instantanément, même si ils sont envoyés seulement quelques secondes d'intervalle.

Est-ce que quelqu'un sait pourquoi mon système est surchargé?

10-26 22:21:09.770: DEBUG/GpsLocationProvider(54): setMinTime 32000 
10-26 22:21:53.011: DEBUG/GpsLocationProvider(54): stopNavigating 
10-26 22:21:57.810: DEBUG/GpsLocationProvider(54): setMinTime 16000 
10-26 22:21:57.810: DEBUG/GpsLocationProvider(54): startNavigating 
10-26 22:21:57.900: DEBUG/GpsLocationProvider(54): setMinTime 16000 
10-26 22:22:39.099: DEBUG/GpsLocationProvider(54): TTFF: 41290 
10-26 22:22:39.350: DEBUG/GpsLocationProvider(54): setMinTime 0 
10-26 22:22:51.740: DEBUG/GpsLocationProvider(54): TTFF: 53925 
10-26 22:22:51.820: DEBUG/GpsLocationProvider(54): setMinTime 0 
10-26 22:22:56.780: DEBUG/GpsLocationProvider(54): TTFF: 58967 
10-26 22:22:56.879: DEBUG/GpsLocationProvider(54): setMinTime 0 

Code pertinent, ci-dessous, enableGPS() appelé onResume()

private void enableGPS() { 

    if (confData.getTrackMode() == AppConstants.GPS_ON) { 
     if (lm == null) 
      lm = (LocationManager) getSystemService(LOCATION_SERVICE); 
     long updateMillis = confData.getMapUpdatePeriod() * 1000; 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
       updateMillis, confData.getMapMinResendDistance(), this); 
    } 

} 

et de l'auditeur est

public void onLocationChanged(Location location) { 

    List<Overlay> overlays = mv.getOverlays(); 
    lo = new MyLocationOverlay(this, mv); 
    overlays.add(lo); 
    lo.enableMyLocation(); 
    int lat = (int) (location.getLatitude() * 1E6); 
    int lng = (int) (location.getLongitude() * 1E6); 
    GeoPoint point = new GeoPoint(lat, lng); 
    mc.setCenter(point); 
    mv.invalidate(); 
} 
+0

Montrez-nous votre code – Falmarri

Répondre

0

Tout d'abord, l'utilisation android GPS avec l'émulateur est vraiment plein de bugs, J'essaie tous les aps avec un vrai téléphone si cela implique d'utiliser le GPS quand je suis incohérent.

Pris du Android Référence:

requestLocationUpdates public void (fournisseur de chaîne, long mintime, flotteur minDistance, l'intention PendingIntent)

mintime l'intervalle de temps minimum pour les notifications, en millisecondes. Ce champ est uniquement utilisé comme indicateur pour économiser l'énergie, et le temps réel entre les mises à jour d'emplacement peut être supérieur ou inférieur à cette valeur.

Edit, j'ai vu dans votre code:

long updateMillis = confData.getMapUpdatePeriod() * 1000; 

Im devinant c'est juste quelque chose qui retourne une constante? Ou est-ce une méthode android? pourquoi ne pas simplement le mettre à 60000 ou quelque chose comme ça manuellement?

+0

Je l'avais vu et je savais que c'était juste un indice. Il semblait prendre l'indice jusqu'à ce que l'emplacement change réellement. J'ai l'impression de me souvenir que dans le passé, cela fonctionnait dans l'émulateur, par exemple, les mises à jour envoyées avant le temps minimum étaient ignorées. Je ne peux pas le prouver et je ne suis pas sur le point de restaurer les versions SDK/plugin. Je comprends ce que vous dites à propos d'un buggy - il ne peut même pas transmettre l'emplacement simulé sans introduire une erreur d'arrondi significative! – NickT

+0

Ajouté quelque chose à ma réponse. Si vous avez la façon de le faire, brancher un téléphone à un ordinateur portable et marcher en regardant le DDMS, mettre également la distance min à 0 pendant le test, voir à quelle fréquence il est appelé, au moins vous pouvez décider ou juste un problème d'émulateur. – blindstuff

+0

J'ai essayé de le coder en dur, cela ne fait aucune différence. J'enregistrais la valeur juste pour m'assurer que ce n'était pas zéro. La valeur provient des préférences enregistrées et est configurable par l'utilisateur.Je n'ai pas de téléphone, alors j'essaie de mettre au point un régime d'économie d'énergie avant d'envoyer l'apk à un ami qui l'a fait. Je ne veux pas aplatir sa batterie tout de suite! – NickT

Questions connexes