实现禁止模拟定位的几种方法,全部是高德地图定位的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()) {//是否是模拟位置
//业务操作
}
...
}
}
}
网友评论