-2

Ich entwickle eine Android-App und möchte den aktuellen Standort des Nutzers abrufen, sobald die App gestartet wird.Warum ruft die getLastLocation() -Methode beim ersten Start der App nicht den Speicherort ab?

Ich verwende diesen Code:

@Override 
    public void onConnected(@Nullable Bundle bundle) { 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // ActivityCompat#requestPermissions 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for ActivityCompat#requestPermissions for more details. 
      return; 
     } 
     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
       mGoogleApiClient); 
     if (mLastLocation != null) { 
      currentLatDouble = mLastLocation.getLatitude(); 
      currentLngDouble = mLastLocation.getLongitude(); 
     } 
    } 

ich ein Snackbar bin mit der erscheint, wenn die Lage nicht erkannt und hat eine „RETRY“ -Taste. Beim Drücken dieser "RETRY" -Taste wird der obige Code erneut ausgeführt und dieses Mal wird der Ort abgerufen.

Was ich will ist, ich möchte den Standort abrufen, sobald die App gestartet wird.

Bitte lassen Sie es mich wissen.

+0

Ein aswer ist wie üblich ... weil getLastLocation kann null zurückgeben ... – Selvin

+0

@Selvin warum gibt es Null jedes Mal, wenn die App gestartet wird und nicht auf den zweiten Versuch? –

+0

Es kann die Zeit sein, bis das Gerät eine bestimmte Position erreicht und als letzte bekannte Position festgelegt wurde. –

Antwort

0

Die Methode LocationServices.FusedLocationApi.getLastLocation kann null zurückgeben, wenn es noch keinen letzten bekannten Standort gibt.

Die beste Verwendung ist eine Standortaktualisierung zu beantragen und die Antwort in dem onLocationChanged Rückruf handhaben, wie folgt aus:

@Override 
public void onConnected(Bundle connectionHint) { 
    ... 
    if (mRequestingLocationUpdates) { 
     startLocationUpdates(); 
    } 
} 

protected void startLocationUpdates() { 
    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mLocationRequest, this); 
} 

Und das die LocationListener wird die empfangene Position

public class MainActivity extends ActionBarActivity implements LocationListener { 
... 
@Override 
public void onLocationChanged(Location location) { 
    mCurrentLocation = location; 
} 

Seien Sie sicher verarbeiten um die documentations zu überprüfen. Diese answer kann Ihnen auch helfen.

+0

Ich weiß nicht warum, aber der Ort wird nicht beim App-Start abgerufen und wird beim zweiten Versuch abgerufen! –

+0

Das liegt daran, dass beim Start der App die Anforderung an den letzten Standort gesendet wird, bevor eine Standortkorrektur vorgenommen werden kann. In nachfolgenden Versuchen hat es genug Zeit, um etwas zu beheben. Wenn Sie die Wiederholungsaktion direkt nach der Initialisierung ausführen, hat sie in diesem zweiten Aufruf möglicherweise noch nicht die Position. Der beste Weg ist, eine Position anzufordern und sobald das Gerät eine Position bekommt, nehmen Sie diese als erste bekannte Position an. –