解決 Android 10 獲取不到定位信息的問題

1. 前言

最近國內很多手機廠商都推送基於 Android 10 開發的自家系統了。之前其實已經對公司的APP進行適配了,但還是發現了新坑。那就是定位的問題。已經申請了定位權限,但是依舊無法進行定位。我用的是高德的定位,項目工程的 targetSdkVersion 爲26。經過不斷嘗試,最後才發現,竟然要開啓手機的定位服務,才能獲取到定位信息。

2. 解決方案

方案的流程圖如下所示:

如何申請定位權限,這裏不展開講。高德定位是怎麼使用的,這裏也不展開講,想了解的直接去高德開放平臺看就是了,文檔寫得很詳細的。“判斷是否已開啓定位服務”和“如何跳轉到系統的定位服務頁面”,這兩塊接下來展開講一講。

2.1 判斷手機定位服務是否開啓

/**
  * 判斷定位服務是否開啓
  *
  * @param context 上下文
  * @return true:開啓;false:未開啓
  */
public static boolean isLocationEnabled(Context context) {
    int locationMode = 0;
    String locationProviders;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
            return false;
        }
        return locationMode != Settings.Secure.LOCATION_MODE_OFF;
    } else {
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        return !TextUtils.isEmpty(locationProviders);
    }
}

2.2 跳轉到系統的定位服務頁面

// 通用版
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));

// 回調版,這個可以在 onActivityResult 裏判斷是否成功開啓定位服務
startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS),
                            REQUEST_CODE_LOCATION);

 

如果想進一步交流和學習的同學,可以加一下QQ羣哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章