首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android GPS 定位獲取經緯度:需請求位置更新而非依賴 getLastKnownLocation

     編輯:程式設計綜合問答

常見誤區

LocationManager.getLastKnownLocation() 僅返回**上次已知位置**,若設備近期未定位(如剛啟動、室內、GPS 未熱啟動),返回 **null**。

正確流程:實現 LocationListener 並請求更新

public class GpsActivity extends Activity implements LocationListener {
    LocationManager locationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        
        // 1. 先嘗試獲取最後已知位置(可能為 null)
        Location lastLoc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (lastLoc != null) {
            updateUI(lastLoc);
        }
        
        // 2. 請求位置更新(最小時間 0ms,最小距離 0m,即盡快回調)
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    }

    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            updateUI(location); // 獲取到新位置
            // 如需單次定位,可在此調用 removeUpdates(this)
        }
    }

    @Override public void onStatusChanged(String provider, int status, Bundle extras) {}
    @Override public void onProviderEnabled(String provider) {}
    @Override public void onProviderDisabled(String provider) {}

    private void updateUI(Location loc) {
        double lat = loc.getLatitude();
        double lng = loc.getLongitude();
        runOnUiThread(() -> textView.setText(String.format("Lat: %.6f, Lng: %.6f", lat, lng)));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        locationManager.removeUpdates(this); // 防洩漏
    }
}

權限聲明 (AndroidManifest.xml)

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

Android 6.0+ 動態權限

運行時請求 ACCESS_FINE_LOCATION,用戶拒絕則無法定位。

室內定位建議

  • GPS 室內信號弱,添加 NETWORK_PROVIDER 融合定位。
  • 使用 Google Play Services FusedLocationProviderClient 更省電、準確。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved