So höre ich GPS-Standort-Updates (mit LocationManager
und LocationListener
):
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 .:
Ich würde gerne wissen:
LocationManager#removeUpdates
als auch LocationManager#requestLocationUpdates
erneut aufrufen, wenn es die einzige Alternative gibt. 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.
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.
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.
Ich habe so etwas gemacht:
Ich hatte einen LocationService (erweitert Service
und implementiert LocationListener
). und ich habe
und im onLocationChangedListener:
%Vor% und im ForceLocationService (extends IntentService
) triggert den normalen Location Listener wie folgt:
Das lässt mich folgendes tun:
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.
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.
Tags und Links android android-location