解决 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群哦!

发布了49 篇原创文章 · 获赞 43 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Fantasy_Lin_/article/details/104856206