實現禁止模擬定位的幾種方法,全部是高德地圖定位的API
第一種: 可判斷手機是否安裝了高危位置模擬軟件 首次定位可能沒有結果
isInstalledHighDangerMockApp()
是否安裝了高危位置模擬軟件 首次定位可能沒有結果
AMapLocationQualityReport 個類下的 isInstalledHighDangerMockApp() 方法,true為已安裝,false為未安裝,只要安裝了,不管是否使用都會返回true,實際需求中,一般不會要求這樣判斷,對用戶來說不太友好,而且這種方法在前幾次定位中有可能獲取不到結果,不太建議使用。一般使用方法:
AMapLocationClient locationClient = new AMapLocationClient(this.getApplicationContext());
...
locationClient.getLastKnownLocation().getLocationQualityReport().isInstalledHighDangerMockApp()
第二種:禁止模擬定位
setMockEnable(boolean isMockEnable)
設置是否允許模擬位置
從3.4.0開始,默認值為true,允許模擬;
3.4.0之前的版本,默認值為false,不允許模擬
AMapLocationClientOption類下的setMockEnable方法,設置成false時,即使使用了模擬定位,獲取的地址都是真實地址。
使用方法:
AMapLocationClientOption locationOption = new AMapLocationClientOption();
...
locationOption.setMockEnable(false);
locationClient.setLocationOption(locationOption);
第三種:判斷獲取的地址是否是模擬地址
此方法在官方文檔上沒找到,但確實是公共方法(看源碼找到的)
AMapLocation類下isMock()方法,true為模擬地址,false為真實地址
使用方法,在定位回調中判斷:
AMapLocationListener locationListener = new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation location) {
if (null != location) {
...
if (location.isMock()) {//是否是模擬位置
//業務操作
}
...
}
}
}