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群哦!
来源:CSDN
作者:Fantasy丶Lin
链接:https://blog.csdn.net/Fantasy_Lin_/article/details/104856206