2016-06-28 12 views
1

Ich benutze die FusedLocationApi, um Updates zu erhalten. Aber trotz der Einstellung von LocationRequest.setInterval auf 500 oder sogar 200 Millis, erhalte ich nur ein Update pro Sekunde. Ich würde gerne zwei Sekunden bekommen, wenn möglich (um einen gleitenden Durchschnitt der Geschwindigkeit zu machen). Gibt es eine harte Grenze?Android OnLocationChanged nur einmal pro Sekunde am schnellsten angerufen

In meinem onCreate für die Aktivität:

googleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .addApi(AppIndex.API).build(); 

In meiner 'onConnected' Methode:

this.locationRequest = new LocationRequest(); 
this.locationRequest.setInterval(200); 
this.locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
LocationServices.FusedLocationApi.requestLocationUpdates(this.googleApiClient, this.locationRequest, this); 

Ich habe auch einen separaten Location ich verwende, um nur Statusänderungen über addGpsStatusListener() zu erhalten und diese scheinen in Ordnung zu sein.

Dank

Antwort

0

als "LocationRequest.setInterval()" docs sagt

Die Lage Client wird aktiv versuchen Ort Updates für Ihre Anwendung in diesem Intervall zu erhalten [...]

Es ist also möglich, dass Sie den Standort nicht in der gewünschten Häufigkeit aktualisieren können. Das liegt an der Art der Standortabfragetechniken (GPS, WiFi, etc.) und ist sehr hardwareabhängig (und auch die Algorithmen des Google Location Protection Providers) und hängt auch von den atmosphärischen Bedingungen ab (im GPS-Fall). Wenn Sie eine hochgenaue Position erhalten möchten, muss das Gerät zuerst einige Proben erhalten, um eine hochgenaue Schätzung durchführen zu können.

1

Per Dokumentationen

Dieses Intervall ungenauer ist. Sie erhalten möglicherweise überhaupt keine Updates (wenn keine Standortquellen verfügbar sind) oder Sie erhalten sie möglicherweise langsamer als angefordert.

Sie können versuchen, public LocationRequest setFastestInterval (long millis) zu verwenden. Die Dokumentation lautet:

er schnellste Rate, dass Sie Updates erhalten können mit setFastestInterval (lang) gesteuert werden. Standardmäßig ist diese schnellste Rate das Sechsfache der Intervallfrequenz.

Stellen Sie auch sicher, dass Sie ACCESS_FINE_LOCATION anfordern. Die docs auch fest, dass:

Anwendungen mit nur der groben Position Erlaubnis, ihr Intervall gedrosselt leise haben

Verwandte Themen