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

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 高德地图判断是否是虚拟定位)