Android location-update jede minute
Ich bin derzeit am schreiben einer Anwendung, erhält die Positionsdaten jede minute (oder andere angegebene Zeit) und thes senden Sie es an server.
Das problem, dass ich bemerkt habe, ist:
Wenn ich mit meinem Antrag zur Stromquelle verbunden, es funktioniert perfekt - sendet Aktualisierungen mit definierten Zeitintervall.
Wenn ich es auf die Batterie es sendet updates nach dem Zufallsprinzip.
Für meine Anwendung verwende ich timer festlegen Intervall des Updates. Dieser timer läuft im Hintergrund. Ich bitte Aktualisierungen im timer und updates entfernen, wenn ich Position.
Fragment von meinem code:
private class mainTask extends TimerTask
{
public void run()
{
toastHandler.sendEmptyMessage(0);
}
}
private final Handler toastHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
date = date.getInstance(); //used to set time of update.
if(!GPSupdating)
{
locationManager.requestLocationUpdates("gps", 0, 0, locationListenerGPS);
GPSupdating = true;
}
}
};
Mein Standort-listener:
LocationListener locationListenerGPS = new LocationListener()
{
public void onLocationChanged(Location updatedLocation)
{
myGPSLocation = updatedLocation;
haveLocationGPS = true;
locationManager.removeUpdates(locationListenerGPS);
GPSupdating = false;
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
Haben Sie eine Idee, warum das nicht richtig funktioniert?
- Ich hatte die gleichen Probleme mit
"TIMER"
im hintergrund läuft "service" bis heute habe ich nicht geschafft, irgendeine Argumentation dahinter... SO habe ichAlram Manager
im OrtTimer
und dass workd perfekt - Danke für deine Antwort. Könnten Sie bitte senden Sie mir einige Beispiel-code, in dem Sie Alarm-Manager statt der Timer? Es wäre auch sehr hilfreich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist keine gute Lösung - aktivieren/deaktivieren des Listeners auf jede minute an.
Besser, zu versuchen, folgende Dinge:
1) Legen Sie die minimale update-Zeit (in requestLocationUpdates ) um eine minute und das senden von Daten an server in den update-listener:
Wenn du mehr brauchst genaue update-Intervalle, als:
2) separaten thread Starten und aktivieren von GPS-updates drauf. Speichern der letzten Position in Gewinde-oder service-variable. Auch start-timer und timer-tick senden Standort an die server.
Versuchen mit Hilfe von Kriterien um die Energie zu handhaben. Set power Anforderung POWER_LOW. Sie verliert Sie an Genauigkeit, wenn.
Werden Sie nicht Energie sparen durch aktivieren und deaktivieren von GPS einmal pro minute. Entweder wählen Sie ein größeres intervall (5 Minuten) oder den Ort evry zweite.
Dann speichern Sie den Ort in einer
lastValidLocation
eingereicht, starten Sie Ihren eigenen Timer, und einmal pro minute ausgelesenlastValidLocation
. und senden zum server, wenn geändert.