Hallo,
ich habe da ein merkwürdiges Problem mit dem FusedLocationProvider, welches ich mir nicht erklären kann.
Ich starte in meiner Main Activity einen Service im Vordergrund durch einen Button-Klick mit:
Die Methode gehört zu einer Klasse "myLocationService" und sieht im Wesentlichen so aus:
private void startLocationService ()
{
locationRequest = new LocationRequest ();
locationRequest.setInterval ( 5000 );
locationRequest.setFastestInterval ( 5000 );
locationRequest.setPriority ( PRIORITY_HIGH_ACCURACY );
LocationServices.getFusedLocationProviderClient(this ).requestLocationUpdates(locationRequest,locationCallback,Looper.getMainLooper () );
// start foreground service
startForeground ( com.bernd.LOCATION_SERVICE_ID, builder.build() );
}
Alles anzeigen
Das funktioniert auch so, die Methode locationCallback wird jetzt alle 5 Sekunden aufgerufen und ich bekomme die aktuelle Position..
Jetzt habe ich die locationCallback-Methode erweitert.
Im Prinzip möchte ich ein Ereignis auslösen, wenn ich Zuhause ankomme.
Da es keinen Sinn macht, die aktuelle Position alle 5 Sekunden abzufragen, wenn ich noch sehr weit entfernt bin,
wollte ich die Häufigkeit der Location Updates an die Restentfernung von Zuhause anpassen.
Ich errechne bei jedem Aufruf der Callback die verbleibende Distanz zu einem festen Ziel (Zuhause) und versuche jetzt in der CallBack-Methode die Update Zeit zu verändern:
@Override
public void onLocationResult ( LocationResult locationResult )
{
// Location holen und distanz berechnen (funktioniert)
// wenn die distanz größer als 10Km ist, neue update zeit anfordern (geht nicht !)
if ( distanceInMeter > 10000 )
{
Toast.makeText(LocationService.this, "Mehr als 10Km entfernt", Toast.LENGTH_SHORT).show();
toneGenerator.startTone(ToneGenerator.TONE_DTMF_A, 500);
// stop location updates LocationServices.getFusedLocationProviderClient(this).removeLocationUpdates(locationCallback);
locationRequest.setInterval ( 10*60*1000 ); // updates jetzt alle 10 Minuten
locationRequest.setFastestInterval ( 10*60*1000 );
locationRequest.setPriority ( PRIORITY_HIGH_ACCURACY );
LocationServices.getFusedLocationProviderClient(this ).requestLocationUpdates(locationRequest,locationCallback,Looper.getMainLooper () );
}
Alles anzeigen
Das Ergebnis sieht so aus:
Die Location Updates kommen jetzt sehr schnell ( schneller als jede Sekunde)
Hat jemand eine Idee, was da falsch sein könnte?
Ich habe mal testweise beim Starten der Updates mit 5 Sekunden und beim Ändern auf 10 Minuten die Anzahl der Updates auf 1 gesetzt.
locationRequest.setInterval ( 10*60*1000 );
locationRequest.setFastestInterval ( 10*60*1000 );
locationRequest.setPriority ( PRIORITY_HIGH_ACCURACY );
locationRequest.setNumUpdates ( 1 );
Jetzt kommt nur noch das erste Update nach 5 Sekunden.
Wenn ich da die Update Zeit auf 10 Minuten setze, kommen gar keine Updates mehr.