2017-09-03 9 views
0

Ich versuche, den aktuellen Standort in Android zu bekommen, und es ist OK, wenn ich auf Android M oder niedriger bin, aber wenn ich meine Anwendung auf Android N ausführen, ist der Standort null und wenn ich Breitengrad erhalten will gibt es 0 zurück . hier ist mein CodeWie bekomme ich den aktuellen Standort in Android 7?

try { 

      if (!isGPSEnabled && !isNetworkEnabled) { 
      } else { 
       this.canGetLocation = true; 
       if (isNetworkEnabled) { 
        locationManager.requestLocationUpdates(
          LocationManager.NETWORK_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("Network", "Network"); 
        if (locationManager != null) { 
         location = locationManager 
           .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
       if (isGPSEnabled) { 
        if (location == null) { 
         locationManager.requestLocationUpdates(
           LocationManager.GPS_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
         Log.d("GPS Enabled", "GPS Enabled"); 
         if (locationManager != null) { 
          location = locationManager 
            .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
          if (location != null) { 
           latitude = location.getLatitude(); 
           longitude = location.getLongitude(); 
          } 
         } 
        } 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

Antwort

3

und seine OK, wenn ich auf android M bin mit oder niedriger

Nein, es ist nicht. getLastKnownLocation() gibt häufig null auf allen Versionen von Android zurück.

getLastKnownLocation() ist eine Optimierung. Verwenden Sie es, aber seien Sie darauf vorbereitet, sich auf onLocationChanged() zu verlassen, wenn getLastKnownLocation()null oder einen veralteten Wert zurückgibt.

Dies ist in abgedeckt, sowie in Büchern und Kursen zur Entwicklung von Android-Apps.

+0

seine für mich auf Android L gearbeitet, onLocationChangeListener funktionieren nicht auf Android 7 für mich zu @CommonsWare –

+1

@BehnamEskandari nutzen: [Diese Probe app] (https://github.com/commonsguy/cw-omnibus/tree/v8.7/Location/Classic) erhält erfolgreich einen Standort auf einem Google Pixel mit Android 7.1. Für Standorte in den USA wird eine Wettervorhersage für diesen Standort angezeigt. – CommonsWare

+2

Die Hauptsache, die über 'getLastKnownLocation() 'verstanden werden muss, ist, dass, wenn Sie kürzlich den Standort auf dem Gerät aktiviert oder das Gerät neu gestartet haben, dieser IMMER NULL zurückgibt, bis ein Standort beim anrufenden Anbieter (GPS, Netzwerk) empfangen wird) von JEDER APP, nicht nur von dir. Nur weil Sie 'requestLocationUpdates() 'aufgerufen haben, heißt das nicht, dass Sie sofort einen Speicherort haben. Auch wenn Sie einen Speicherort von 'getLastKnownLocation()' erhalten, bedeutet dies nicht, dass es neu ist. Es könnte Minuten oder Stunden alt sein. –

Verwandte Themen