2017-10-12 73 views
0

我嘗試使用函數getLastKnownLocation()獲取最後一個已知位置來獲取經緯度來將其設置爲textField,但位置命名位置實例返回null,因此它無法獲取經度和經度並且設置textField位置不可用如何修復它得到最後的已知位置?!如何使用函數getLastKnownLocation()?

   public class ShowLocationActivity extends Activity implements LocationListener { 
       private TextView latituteField; 
       private TextView longitudeField; 
       private LocationManager locationManager; 
       private String provider; 

       /** Called when the activity is first created. */ 
       @Override 
       public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_show_location); 
        latituteField = (TextView) findViewById(R.id.TextView02); 
        longitudeField = (TextView) findViewById(R.id.TextView04); 

        // Get the location manager 
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
        // Define the criteria how to select the locatioin provider -> use 
        // default 
        Criteria criteria = new Criteria(); 
        provider = locationManager.getBestProvider(criteria, false); 
        if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) 
          == PackageManager.PERMISSION_GRANTED) 
        { 
         Location location = locationManager.getLastKnownLocation(provider); 

         // Initialize the location fields 
         if (location != null) { 
          System.out.println("Provider4 " + provider + " has been selected."); 
          onLocationChanged(location); 
         } else { 
          latituteField.setText("Location not available"); 
          longitudeField.setText("Location not available"); 
         } 
        } 
       } 

       /* Request updates at startup */ 
       @Override 
       protected void onResume() { 
        super.onResume(); 
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) 
          == PackageManager.PERMISSION_GRANTED) 
        locationManager.requestLocationUpdates(provider, 400, 1, this); 
       } 

       /* Remove the locationlistener updates when Activity is paused */ 
       @Override 
       protected void onPause() { 
        super.onPause(); 
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) 
          == PackageManager.PERMISSION_GRANTED) 
        locationManager.removeUpdates(this); 
       } 

       @Override 
       public void onLocationChanged(Location location) { 
        int lat = (int) (location.getLatitude()); 
        int lng = (int) (location.getLongitude()); 
        latituteField.setText(String.valueOf(lat)); 
        longitudeField.setText(String.valueOf(lng)); 
       } 

       @Override 
       public void onStatusChanged(String provider, int status, Bundle extras) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onProviderEnabled(String provider) { 
        Toast.makeText(this, "Enabled new provider " + provider, 
          Toast.LENGTH_SHORT).show(); 

       } 

       @Override 
       public void onProviderDisabled(String provider) { 
        Toast.makeText(this, "Disabled provider " + provider, 
          Toast.LENGTH_SHORT).show(); 
       } 
      } 

}

回答

0

使用這種一小段代碼片段來獲得最後已知的位置:

添加依賴:

implementation 'com.google.android.gms:play-services-location:11.4.0' 

,並添加權限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

則:

@SuppressWarnings("MissingPermission") 
    private void getLastLocation() { 
    FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); 

     mFusedLocationClient.getLastLocation() 
       .addOnCompleteListener(new OnCompleteListener<Location>() { 
        @Override 
        public void onComplete(@NonNull Task<Location> task) { 
         if (task.isSuccessful() && task.getResult() != null) { 
          mLastLocation = task.getResult(); 
          double lat = mLastLocation.getLatitude(); 
          double log = mLastLocation.getLongitude(); 
          Log.d(TAG, "lat:"+lat+"::"+log); 

         } else { 
          Timber.w("getLastLocation:exception::" + task.getException()); 

         } 
        } 
       }); 
    } 

更多細節轉到Getting the Last Known Location

+0

我有錯誤FusedLocationProviderClient「不能解決FusedLocationProviderClient」雖然我添加的權限 編譯「com.google.android.gms:發揮服務:9.2.0' compile'c​​om.google.android.gms:play-services-location:9.2.0' 是什麼問題? –

+0

更新您的依賴關係.check更新的代碼 – vinay