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羣哦!