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()) {//是否是模擬位置
//業務操作
}
}
...
}
}
}