FusedLocationApi.getLastLocation immer null

Ich möchte einfach den Gerätespeicherort in meinem Android-Projekt abrufen und um dies zu tun, benutze ich den Play-Service-Ansatz:

protected synchronized void buildGoogleApiClient() { mGoogleApiClient = new GoogleApiClient.Builder( MainSearchActivity.this ) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected( Bundle bundle ){ Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); if( location == null ){ LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, new LocationListener() { @Override public void onLocationChanged(Location location) { lastLocation = location; } }); } } @Override public void onConnectionSuspended( int i ){ } }) .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed( ConnectionResult connectionResult ){ if( connectionResult.hasResolution() ){ try { // Start an Activity that tries to resolve the error connectionResult.startResolutionForResult(MainSearchActivity.this, CONNECTION_FAILURE_RESOLUTION_REQUEST); }catch( IntentSender.SendIntentException e ){ e.printStackTrace(); } }else{ Utils.logger("Location services connection failed with code " + connectionResult.getErrorCode(), Utils.LOG_DEBUG ); } } }) .addApi(LocationServices.API) .build(); mGoogleApiClient.connect(); } public Location retrieveLastLocation(){ Location loc = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); if( loc == null) { } return loc; //TODO: What if loc is null? } 

Aber die loc-Variable ist IMMER null. Es ist so wie bei verschiedenen Handys, jedes Mal. Auch letzteLocation, die ich versuche, in der onLocationChanged zuzuweisen, ändert sich nie. Immer null

Dies ist die Erlaubnis, die ich für die App eingestellt habe

  <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="com.vogella.android.locationapi.maps.permission.MAPS_RECEIVE" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 

Ich verstehe es einfach nicht: Warum kann die LocationServices keine Position abrufen? Ich habe alle Geolocation-Einstellungen aktiviert auf alle drei die Device ich getestet auf: – /

Vielen Dank für jede Hilfe

  • So dynamisch aktualisieren Sie eine bestimmte overlayitem
  • Unterschied zwischen LocationRequest setInterval (long millis) und LocationRequest setFastestInterval (long millis)
  • Android Emulator startet beim Senden von Mock-Standort neu
  • Zeigen Sie die Richtung des Platzes mit Pfeil in Android ListView an
  • Wie bekomme ich Stadt Name von Latitude & Longitude in Android?
  • Probleme mit der Smart Location Library
  • Wie finde ich Grad von der Breite Wert in Android?
  • Android check location services aktiviert mit play services location api
  • 7 Solutions collect form web for “FusedLocationApi.getLastLocation immer null”

    Der fusionierte Location Provider pflegt nur den Hintergrundort, wenn mindestens ein Client mit ihm verbunden ist. Jetzt nur das Einschalten der Standort-Service wird nicht garantieren, um die letzte bekannte Ort zu speichern.

    Sobald der erste Client verbindet, wird es sofort versuchen, einen Standort zu bekommen. Wenn Ihre Aktivität ist der erste Client zu verbinden und getLastLocation() wird sofort auf onConnected() aufgerufen, das könnte nicht genug Zeit für den ersten Ort zu kommen ..

    Ich schlage vor, dass Sie die Maps App zuerst starten, damit es zumindest einen bestätigten Standort gibt und dann Ihre App testen.

    Ich denke, es gibt einen kleinen Fräulein, der für mich nicht sichtbar ist.

    Der mGoogleApiClient ist aufgebaut, scheint aber nicht verbunden zu sein. Sie können dies überprüfen, indem Sie mGoogleApiClient.isConnected() aufrufen.

    Sie können die onStart-Methode einfach überschreiben und dort anrufen. Oder Sie können onResume() überschreiben, falls Sie auf den Standort zugreifen möchten, wenn ur Aktivität sichtbar ist.

      @Override protected void onStart() { super.onStart(); if (mGoogleApiClient != null) { mGoogleApiClient.connect(); } } 

    Erstellen Sie zunächst ein LocationRequest Objekt:

      // Create the LocationRequest object mLocationRequest = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .setInterval(10 * 1000) // 10 seconds, in milliseconds .setFastestInterval(1 * 1000); // 1 second, in milliseconds 

    Stellen Sie dann sicher, dass der Benutzer die Berechtigung zur Verwendung des Standorts erteilt hat. Wenn ja, erhalten Sie den Standort von requestLocationUpdates wie folgt:

     void getLocation() { Location location = null; if (ContextCompat.checkSelfPermission(activity, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1); /*TODO!! INSERT CODE TO PROMPT USER TO GIVE PERMISSION*/ } else { LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } mLastLocation = location; LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient,this); } 

    Achten Sie darauf, die Updates zu entfernen, wenn Sie nur einen Standort ohne ständige Überwachung benötigen. Auf diese Weise bekommst du nie einen Nullstand.

    Weitere Informationen finden Sie unter http://blog.teamtreehouse.com/beginners-guide-location-android .

    Wenn getLastLocation () immer null zurückkehrt, versuchen Sie diesen Hack. Ich habe es benutzt, um mein Problem zu lösen. Implementiere LocationListener (import com.google.android.gms.location.LocationListener) in deiner Aktivität.

     protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); Context mContext = this; manager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); createLocationRequest(); mGoogleApiClient = new GoogleApiClient.Builder(mContext) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); mGoogleApiClient.connect(); } private void createLocationRequest(){ mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setInterval(SET_INTERVAL); mLocationRequest.setFastestInterval(FASTEST_INTERVAL); } 

    OnStart oder onResume (ich bevorzugte onResume)

     @Override protected void onResume() { super.onResume(); if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) ) { if (mGoogleApiClient != null) { mGoogleApiClient.connect(); } }else{ // Showyourmesg(); } } @Override protected void onPause() { super.onPause(); if (mGoogleApiClient != null) { mGoogleApiClient.disconnect(); } } protected void startLocationUpdates(){ LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest,this); } protected void stopLocationUpdates() { LocationServices.FusedLocationApi.removeLocationUpdates( mGoogleApiClient, this); } 

    Jetzt überprüfen Sie in Ihrer onLocationChanged-Methode, ob der googleApiClient angeschlossen ist oder nicht. Wenn es angeschlossen ist, trennen Sie es und schließen Sie es wieder an.

     @Override public void onLocationChanged(Location location) { Log.d("SplashAct", "LocatinChngListner, loc: " + location.getLatitude() + "," + location.getLongitude()); if (mGoogleApiClient != null) if (mGoogleApiClient.isConnected() || mGoogleApiClient.isConnecting()){ mGoogleApiClient.disconnect(); mGoogleApiClient.connect(); } else if (!mGoogleApiClient.isConnected()){ mGoogleApiClient.connect(); } } 

    Und schließlich in deiner onConntected () Methode

     @Override public void onConnected(Bundle bundle) { Log.d("ACTIVITY", "ApiClient: OnConnected"); mLastLocation = LocationServices.FusedLocationApi.getLastLocation( mGoogleApiClient); if (mLastLocation == null){ startLocationUpdates(); // bind interface if your are not getting the lastlocation. or bind as per your requirement. } if (mLastLocation != null){ while (latitude == 0 || longitude == 0){ pDialog.setMessage("Getting Location"); pDialog.show(); latitude = mLastLocation.getLatitude(); longitude = mLastLocation.getLongitude(); if (latitude != 0 && longitude != 0){ stopLocationUpdates(); // unbind the locationlistner here or wherever you want as per your requirement. pDialog.dismiss(); // location data received, dismiss dialog, call your method or perform your task. } } } } 

    Wir versuchen immer wieder, mit googleApiClient zu verbinden, auch wenn es bereits verbunden ist, damit wir die lastLocation-Daten erhalten können. Dies hängt von den LocationRequest-Intervallen ab. Sie können die Standortdaten auch in onLocationChanged abrufen und Ihre Aufgabe von dort aus durchführen.

    Wenn Sie Android Marshmallow (API 23) oder neuere Version von Android verwenden, können Sie das gleiche Problem, weil die Erlaubnis nicht gewährt wird . Sie sollten explizit die Berechtigung zur Laufzeit für den Standort anfordern oder wenn es sich um ein Testprojekt handelt, können Sie die Standortberechtigung von App-Einstellungen auf Ihrem Telefon erteilen .

    Hier ist die genaue Antwort und Erklärung.

    LocationClient getLastLocation () return null

    Das ist mit Amit K. Sahas Antwort verbunden, aber für mich, auf einem meiner Lollipop Geräte habe ich immer null . So öffnete ich die Karten App und ich habe den Bildschirm unten gefragt mich, um all den Jazz, um meinen Standort zu verbessern.

    Sobald ich das einmal getan habe, konnte mein Gerät den Standort mit nur einem Anruf an getLastLocation() ;

    Ich nehme an, dann müsste man für diese Berechtigungen bei der App-Installation für Benutzer fragen, die ihre Karten-App noch nicht benutzt haben.

    Bildbeschreibung hier eingeben

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.