1.禁止虚拟定位
setMockEnable(boolean isMockEnable)
设置是否允许模拟定位,true是允许模拟定位,false是不允许模拟定位,默认值是true。
具体使用方法
AMapLocationClientOption locationOption = new AMapLocationClientOption();
...
locationOption.setMockEnable(false);
locationClient.setLocationOption(locationOption);
2.判断返回的地址是否是虚拟地址
如果开启了虚拟定位,想判断高德地图返回的地址是否是虚拟地址呢。
查看了网上的资料用高德地图SDK里面的isMock
方法或者trustedLevel
方法来判断,都得不到准确的结果,有时候真实的地址也会返回是虚拟定位的结果。
通过源码的查看,高德定位的结果AMapLocation
类继承自Location
类。可以用Location
的isFromMockProvider
方法去判断。
/**
* 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()) {//是否是模拟位置
//业务操作
}
}
...
}
}
}