Android系统中是否开启定位及定位模式的判断

Android系统中包括3中定位模式:

  使用GPS、WLAN和移动网络 使用WLAN和移动网络 仅使用GPS
特点

同时使用GPS、WIFI及基站定位,速度快、精度高,室内定位效果好。

缺点:耗流量、耗电量

只使用WIFI和基站定位,需要WIFI或者基站才行,室内效果好。

缺点:依赖WIFI或基站,精度一般

不依赖WIFI和基站,室内效果差,户外可靠性好。

缺点:室内效果差

代码 LocationManager.GPS_PROVIDER = true;
LocationManager.NETWORK_PROVIDER = true;
LocationManager.GPS_PROVIDER = false;
LocationManager.NETWORK_PROVIDER = true;
LocationManager.GPS_PROVIDER = true;
LocationManager.NETWORK_PROVIDER = false;
是否打开定位服务 Settings.Secure.LOCATION_MODE = 3 Settings.Secure.LOCATION_MODE = 2 Settings.Secure.LOCATION_MODE = 1

Android系统中检查是否开启了定位服务的代码,参考如下:

    /**
     * 获取设备是否支持GPS定位
     *
     * @param context context
     * @return 如果设备上提供了GPS定位,返回 true ,否则返回false
     */
    public static boolean hasGpsDevice(@NonNull final Context context) {
        final LocationManager lms = (LocationManager) context.getSystemService(android.content.Context.LOCATION_SERVICE);
        if (null != lms) {
            final List<String> providers = lms.getAllProviders();
            if (null != providers) {
                return providers.contains(LocationManager.GPS_PROVIDER);
            }
        }
        return false;
    }

    /**
     * 检查设备是否开启了定位服务
     *
     * @return 定位功能已经开启返回 true,否则返回false
     */
    public static boolean isLocationEnabled(@NonNull final Context context) {
        final LocationManager lms = (LocationManager) context.getSystemService(android.content.Context.LOCATION_SERVICE);
        if (null != lms) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                return lms.isLocationEnabled();
            } else {
                // 目前已知在OPPO Pad Android 11 版本上,设备本身没有GPS设备,此时如果检查GPS定位权限会持续返回 false
                // 导致用户没有办法使用设备,因此我们再没有GPS的设备上,默认直接判断网络定位功能有没有开启
                if (hasGpsDevice(context)) {
                    return lms.isProviderEnabled(LocationManager.GPS_PROVIDER) || lms.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
                }
                return lms.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
            }
        }
        return false;
    }

参考链接


发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注