Android: LocationManager passt die minTime / minDistance-Schwellenwerte dynamisch an

8

So höre ich GPS-Standort-Updates (mit LocationManager und LocationListener ):

%Vor%

Aber ich möchte die minTime und minDistance Argumente, die von LocationManager#requestLocationUpdates verwendet werden, dynamisch anpassen. Mein Ziel ist es, Batterie zu sparen, gemäß mehreren Nutzungsrichtlinien, d. H .:

  • Wenn sich der Benutzer nicht bewegt, erhöhen Sie die minTime, um eine Standortaktualisierung zu erhalten
  • Wenn sich der Benutzer sehr schnell bewegt, erhöhen Sie den minDistance
  • Wenn der Benutzer sich im Haus befindet (keine GPS-Abdeckung), erhöhen Sie beide Werte
  • Wenn die Batterie zu schwach ist, erhöhen Sie beide
  • ... (jede andere Heuristik)

Ich würde gerne wissen:

  1. Ist das wirklich eine gute Idee, um die Batterie zu schonen?
  2. Wie könnte ich diese Art von Anpassungen vornehmen? Ich kann sowohl LocationManager#removeUpdates als auch LocationManager#requestLocationUpdates erneut aufrufen, wenn es die einzige Alternative gibt.
  3. Irgendwelche Ideen oder Beispielcodes, die Sie kennen, um diese Art von adaptiven Algorithmen zu implementieren?

Bearbeiten: Die Anwendung ist ein Tracking-System, um zu wissen, wo sich Personen befinden, um Aufgaben der Person zuzuordnen, die einem bestimmten Ort am nächsten ist. Eigentlich dauert der Akku kaum 8 Stunden, also möchte ich ihn erhöhen.

    
Guido García 22.08.2010, 11:57
quelle

3 Antworten

4

AFAIK müssen Sie removeUpdates und requestLocationUpdates erneut aufrufen.

Sie können auch nach anderen Möglichkeiten suchen, um zu sehen, ob sich das Telefon überhaupt bewegt, wie der Beschleunigungssensor. Lesen Sie hier hier und siehe Antworten dieser anderen Frage

Aber geben Sie Ihnen mehr Idee, müssen Sie das Problem selbst darstellen. Versuchen Sie nicht zu früh zu optimieren, bis Sie kein Problem haben. Wenn Sie haben, müssen Sie Details darüber veröffentlichen.

    
Pentium10 22.08.2010, 12:27
quelle
1
  

Ist das wirklich eine gute Idee, um die Akkulaufzeit zu sparen?

Wahrscheinlich nicht. AFAIK, das GPS-Radio wird die ganze Zeit sein, und das ist der größte Batterieverbrauch in dem, was Sie beschreiben. Um den Akku zu schonen, müssen die Updates entfernt werden, damit das GPS-Radio ausgeschaltet wird. Wenn Sie jedoch das nächste Mal Ortsaktualisierungen anfordern, benötigt GPS einige Zeit, um seine anfängliche Lösung zu erhalten.

  

Wenn sich der Benutzer in Innenräumen befindet (keine GPS-Abdeckung), erhöhen Sie beide Werte

Wenn Sie keinen GPS-Fix erhalten, schalten Sie das Radio aus und versuchen Sie es einige Minuten später erneut (oder basierend auf einem UI-Ereignis oder etwas). Es macht keinen Sinn, das GPS anzulassen, wenn es Ihnen nicht gut tut.

  

Wenn die Batterie zu schwach ist, erhöhen Sie beide

Wenn die Batterie zu schwach ist, schalten Sie GPS aus. Wechseln Sie entweder zu einem Low-Power-Provider (verwenden Sie Criteria , um einen zu finden) oder gehen Sie ohne Standortdaten aus. Lassen Sie den Benutzer über eine Präferenz entscheiden, was "zu niedrig" ist.

    
CommonsWare 22.08.2010 12:24
quelle
1

Ich habe so etwas gemacht:

Ich hatte einen LocationService (erweitert Service und implementiert LocationListener ). und ich habe

hinzugefügt %Vor%

und im onLocationChangedListener:

%Vor%

und im ForceLocationService (extends IntentService ) triggert den normalen Location Listener wie folgt:

%Vor%

Das lässt mich folgendes tun:

  1. Wenn das System eine Standortaktualisierung erhält, bevor der AlarmManager den ForceLocationService auslöst, erhält es automatisch die Aktualisierung und setzt den Alarm zurück.

  2. Wenn es das Update nicht erhält, bis der Alarm ausgelöst wird, wird der Alarm ausgelöst, wodurch sichergestellt wird, dass wir das Update bei Bedarf erhalten.

Das einzige Problem, das ich habe, ist, dass es nicht funktioniert, wenn es keine Standortänderung gibt, weil das Zurücksetzen des Alarms in onLocationChanged () durchgeführt wird.

    
Naresh R 10.12.2012 15:19
quelle

Tags und Links