美文网首页
Android 高德地图判断是否是虚拟定位

Android 高德地图判断是否是虚拟定位

作者: cy_why | 来源:发表于2022-03-14 14:25 被阅读0次
    1.禁止虚拟定位

    setMockEnable(boolean isMockEnable)
    设置是否允许模拟定位,true是允许模拟定位,false是不允许模拟定位,默认值是true。
    具体使用方法

    AMapLocationClientOption locationOption = new AMapLocationClientOption();
    ...
    locationOption.setMockEnable(false);
    locationClient.setLocationOption(locationOption);
    
    2.判断返回的地址是否是虚拟地址

    如果开启了虚拟定位,想判断高德地图返回的地址是否是虚拟地址呢。
    查看了网上的资料用高德地图SDK里面的isMock方法或者trustedLevel方法来判断,都得不到准确的结果,有时候真实的地址也会返回是虚拟定位的结果。
    通过源码的查看,高德定位的结果AMapLocation类继承自Location类。可以用LocationisFromMockProvider方法去判断。

    /**
         * Returns true if the Location came from a mock provider.
         *
         * @return true if this Location came from a mock provider, false otherwise
         */
        public boolean isFromMockProvider() {
            return (mFieldsMask & HAS_MOCK_PROVIDER_MASK) != 0;
        }
    

    通过isFromMockProvider方法可以得到是否是虚拟位置。
    在地址回调中使用,具体使用方法如下

    AMapLocationListener locationListener = new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation location) {
                if (null != location) {
                       ...
                   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                        if (location.isFromMockProvider()) {//是否是模拟位置
                          //业务操作
                        }
                    }
                        ...
                 }
            }
    }
    

    相关文章

      网友评论

          本文标题:Android 高德地图判断是否是虚拟定位

          本文链接:https://www.haomeiwen.com/subject/zbxydrtx.html