2016-05-25 13 views
1

Fall: Die Anwendung benötigt den Gerätestandort zum Angeben der Webanforderung. Wenn Standortanbieter deaktiviert sind, sollte der letzte bekannte Standort verwendet werden. Als android.locationseems to be deprecated in favor of Fused location API entschied ich mich, neue API zu verwenden, stieß jedoch auf einige Probleme. Mit der Verwendung der alten API sieht meinem Fall etwas wie folgt aus:Android: neuer Google Client-API-Standort

//get Location 
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
Criteria criteria = new Criteria(); 
... 
bestProvider = locationManager.getBestProvider(criteria, true); 

protected void onResume() { 
    super.onResume(); 

    //check providers. If providers disabled, use last known location 
    if (locationManager.isProviderEnabled(bestProvider)) { 
     locationManager.requestLocationUpdates(bestProvider, 1000 * 60, 100, this); 
    } else { 
     Location location = locationManager.getLastKnownLocation(bestProvider); 
    } 

Aber ich bin nicht sicher, wie ähnliche Aktionen in Fused-API zu machen. Wie sieht die Verfügbarkeit von Anbietern in der neuen API aus? Weil neue Schnittstellen für Fused Location() mir keinen Hinweis geben.

Was ich versuche zu verstehen, ist der in meinem Beitrag beschriebene Anwendungsfall. Wenn die Standortanbieter deaktiviert sind, sollte der letzte bekannte Standort verwendet werden. Also, bedingte Anweisung in Core Location API für diesen Fall war das Ergebnis der isProviderEnabled() Methode. Aber was ist mit einer neuen API?

Antwort

2

Erstens, LocationManager ist nicht veraltet. Aber es verwendet die Android-API direkt. Der Google Fused-Standort ist abhängig von der Google-API (nicht Android-API, dh, nicht alle Mobiltelefone haben sie standardmäßig).

In Google API müssen Sie sich keine Gedanken darüber machen, welcher Anbieter verwendet werden soll. Sie müssen lediglich eine Verbindung zur API herstellen, Callbacks registrieren, Anfragen senden und das ist alles.

https://developer.android.com/training/location/receive-location-updates.html

Aus mehreren Entwicklern Dokumente Google:

Dies ist build.gradle

apply plugin: 'com.android.application' 
... 

dependencies { 
    compile 'com.google.android.gms:play-services-location:9.0.0' 
} 

In Ihrer Tätigkeit, so etwas wie dies in Ihrer Anwendung gebracht werden soll

gestellt werden
mGoogleApiClient = new GoogleApiClient.Builder(this) 
     .addApi(LocationServices.API) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .build() 

mGoogleApiClient muss als deklariert werden GoogleApiClient GoogleApiClient mGoogleApiClient;

Natürlich muss diese Aktivität GoogleApiClient.ConnectionCallbacks implementieren, dies hat zwei Funktionen onConnected und onConnectionSuspended.

Implementieren Sie auch GoogleApiClient.OnConnectionFailedListener. Dies hat eine Funktion OnConnectionFailed

In OnConnectionFailed, behandelt den Fehler (zB Alertdialog sagt, dass es ein Fehler im Zusammenhang mit Google API Services)

In OnConnection, könnten Sie so etwas wie diese

LocationRequest mLocationRequest = new LocationRequest().setInterval(1000 * 60); 
    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mLocationRequest, this); 
setzen

Hinweis dazu muss die Aktivität implementieren com.google.android.gms.location.LocationListener

Dies ist eine Möglichkeit, eine andere Möglichkeit ist, PendingIntent verwenden, um mit BroadcastReceiver zu binden (mehr Leistung aber die Listener-Methode könnte in Ordnung sein)

+1

Vielen Dank für Ihre Antwort, aber dieser Teil ist klar für mich. Was ich versuche zu verstehen, ist der in meinem Beitrag beschriebene Anwendungsfall. _Wenn Standortanbieter deaktiviert sind, sollte der letzte bekannte Speicherort verwendet werden. Daher war die bedingte Anweisung in der Core-Standort-API für diesen Fall das Ergebnis der 'isProviderEnabled()' -Methode. Aber was ist mit einer neuen API? –

Verwandte Themen