(未显示1个用户的4个中间版本) | |||
第1行: | 第1行: | ||
<div class="bluetitle"><div class="services-title-text">简介</div></div> | <div class="bluetitle"><div class="services-title-text">简介</div></div> | ||
− | + | 挖掘各类模拟定位方式对百度定位SDK内部信息的影响特征,综合多源数据信息,有效识别模拟卫星定位结果,为签到、运动、出行、游戏等场景的位置真实性提供有力保障。<br/> | |
− | 在签到类场景中,如果设置了单次定位setOnceLocation(true) | + | 在签到类场景中,如果设置了单次定位setOnceLocation(true),则不会返回卫星定位结果,不需进行防定位作弊配置。 |
防定位作弊配置具体步骤如下: | 防定位作弊配置具体步骤如下: | ||
<div class="devguide"> | <div class="devguide"> | ||
− | <div class="leftborderbg" style="height: | + | <div class="leftborderbg" style="min-height:1400px;"></div> |
<div class="devguideorder"><span>1</span>第一步,准备工作</div> | <div class="devguideorder"><span>1</span>第一步,准备工作</div> | ||
<div class="devguidecenter">在使用定位SDK进行具体开发工作之前,需 [http://lbsyun.baidu.com/apiconsole/key?application=key 获取密钥(AK)],并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。 | <div class="devguidecenter">在使用定位SDK进行具体开发工作之前,需 [http://lbsyun.baidu.com/apiconsole/key?application=key 获取密钥(AK)],并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。 | ||
第39行: | 第39行: | ||
option.setOpenGps(true); | option.setOpenGps(true); | ||
− | // | + | //可选,设置是否使用卫星定位,默认false |
//使用高精度和仅用设备两种定位模式的,参数必须设置为true | //使用高精度和仅用设备两种定位模式的,参数必须设置为true | ||
第48行: | 第48行: | ||
//BD09:百度墨卡托坐标; | //BD09:百度墨卡托坐标; | ||
//海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标 | //海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标 | ||
− | + | ||
option.setEnableSimulateGps(false); | option.setEnableSimulateGps(false); | ||
− | // | + | //可选,设置是否需要过滤卫星定位仿真结果,默认需要,即参数为false |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
mLocationClient.setLocOption(option); | mLocationClient.setLocOption(option); | ||
//mLocationClient为第二步初始化过的LocationClient对象 | //mLocationClient为第二步初始化过的LocationClient对象 | ||
第73行: | 第67行: | ||
//以下只列举部分获取位置描述信息相关的结果 | //以下只列举部分获取位置描述信息相关的结果 | ||
//更多结果信息获取说明,请参照类参考中BDLocation类中的说明 | //更多结果信息获取说明,请参照类参考中BDLocation类中的说明 | ||
− | + | ||
double latitude = location.getLatitude(); //获取纬度信息 | double latitude = location.getLatitude(); //获取纬度信息 | ||
double longitude = location.getLongitude(); //获取经度信息 | double longitude = location.getLongitude(); //获取经度信息 | ||
第82行: | 第76行: | ||
int errorCode = location.getLocType(); | int errorCode = location.getLocType(); | ||
− | //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明 | + | // 获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明 |
− | int | + | int strategy = location.getMockGpsStrategy(); |
− | // | + | // 防作弊策略识别码,用于辅助分析排查问题 |
+ | |||
+ | int probability = location.getMockGpsProbability(); | ||
+ | // 此定位点作弊概率,3代表高概率,2代表中概率,1代表低概率,0代表概率为0 | ||
− | BDLocation | + | BDLocation realLoc = location.getReallLocation(); |
− | + | if (location.getMockGpsStrategy() > 0 && null != realLoc) { | |
− | + | double dis = location.getDisToRealLocation(); | |
− | if ( | + | // 虚假位置和真实位置之间的距离 |
− | + | int realLocType = realLoc.getLocType(); | |
− | + | // 真实定位结果类型 | |
− | + | String realLocTime = realLoc.getTime(); | |
− | + | // 真实位置定位时间 | |
+ | double realLat = realLoc.getLatitude(); | ||
+ | // 真实纬度 | ||
+ | double realLng = realLoc.getLongitude(); | ||
+ | // 真实经度 | ||
+ | String realLocCoorType = realLoc.getCoorType(); | ||
+ | // 真实位置坐标系 | ||
} | } | ||
} | } | ||
第102行: | 第105行: | ||
<div class="devguidecenter">调用LocationClient的start()方法,发起请求,在BDAbstractLocationListener接口中,便可获得。 | <div class="devguidecenter">调用LocationClient的start()方法,发起请求,在BDAbstractLocationListener接口中,便可获得。 | ||
− | + | 详细信息请参考[http://lbs.baidu.com/index.php?title=android-locsdk/guide/get-location/latlng 获取经纬度中第五步的介绍]。</div> | |
+ | |||
+ | <div class="bluetitle"><div class="services-title-text">示例Demo</div></div> | ||
+ | |||
+ | |||
+ | <div class='syncdisplay-wrap'> | ||
+ | <div class="syncdisplay-phone-android"> | ||
+ | <div class="video-wrap infor"> | ||
+ | <div class="video-control"></div> | ||
+ | <pre>https://mapopen-pub-androidsdk.cdn.bcebos.com/location/anti-cheating/FZBdemo2.mp4</pre> | ||
+ | </div> | ||
+ | </div> | ||
+ | </div> |
2022年9月7日 (三) 19:44的版本
简介
挖掘各类模拟定位方式对百度定位SDK内部信息的影响特征,综合多源数据信息,有效识别模拟卫星定位结果,为签到、运动、出行、游戏等场景的位置真实性提供有力保障。
在签到类场景中,如果设置了单次定位setOnceLocation(true),则不会返回卫星定位结果,不需进行防定位作弊配置。
防定位作弊配置具体步骤如下:
1第一步,准备工作
在使用定位SDK进行具体开发工作之前,需 获取密钥(AK),并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。
此外,Google在Android 6.0中引入了动态权限获取机制,开发者在使用定位SDK之前,请详细了解关于Android 6.0系统开发须知。
2第二步,初始化LocationClient类
请在主线程中声明LocationClient类对象,该对象初始化需传入Context类型参数。推荐使用getApplicationConext()方法获取全进程有效的Context。
核心代码段如下:
public LocationClient mLocationClient = null; private MyLocationListener myListener = new MyLocationListener(); //BDAbstractLocationListener为7.2版本新增的Abstract类型的监听接口 //原有BDLocationListener接口暂时同步保留。具体介绍请参考后文中的说明 public void onCreate() { mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类 mLocationClient.registerLocationListener(myListener); //注册监听函数 }
3第三步,配置定位SDK参数
要实现定位防作弊功能,需要利用LocationClientOption类配置定位SDK参数。
核心代码及注释说明如下:
LocationClientOption option = new LocationClientOption(); option.setScanSpan(1000); //可选,设置发起定位请求的间隔,int类型,单位ms //如果设置为0,则代表单次定位,即仅定位一次,默认为0 option.setOpenGps(true); //可选,设置是否使用卫星定位,默认false //使用高精度和仅用设备两种定位模式的,参数必须设置为true option.setCoorType("bd09ll"); //可选,设置返回经纬度坐标类型,默认GCJ02 //GCJ02:国测局坐标; //BD09ll:百度经纬度坐标; //BD09:百度墨卡托坐标; //海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标 option.setEnableSimulateGps(false); //可选,设置是否需要过滤卫星定位仿真结果,默认需要,即参数为false mLocationClient.setLocOption(option); //mLocationClient为第二步初始化过的LocationClient对象 //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用 //更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
4第四步,实现BDAbstractLocationListener接口
Android定位SDK自V7.2版本起,对外提供了Abstract类型的监听接口BDAbstractLocationListener,用于实现定位监听。原有BDLocationListener暂时保留,推荐开发者升级到Abstract类型的新监听接口使用,该接口会异步获取定位结果,核心代码如下:
public class MyLocationListener extends BDAbstractLocationListener{ @Override public void onReceiveLocation(BDLocation location){ //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果 //以下只列举部分获取位置描述信息相关的结果 //更多结果信息获取说明,请参照类参考中BDLocation类中的说明 double latitude = location.getLatitude(); //获取纬度信息 double longitude = location.getLongitude(); //获取经度信息 float radius = location.getRadius(); //获取定位精度,默认值为0.0f String coorType = location.getCoorType(); //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准 int errorCode = location.getLocType(); // 获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明 int strategy = location.getMockGpsStrategy(); // 防作弊策略识别码,用于辅助分析排查问题 int probability = location.getMockGpsProbability(); // 此定位点作弊概率,3代表高概率,2代表中概率,1代表低概率,0代表概率为0 BDLocation realLoc = location.getReallLocation(); if (location.getMockGpsStrategy() > 0 && null != realLoc) { double dis = location.getDisToRealLocation(); // 虚假位置和真实位置之间的距离 int realLocType = realLoc.getLocType(); // 真实定位结果类型 String realLocTime = realLoc.getTime(); // 真实位置定位时间 double realLat = realLoc.getLatitude(); // 真实纬度 double realLng = realLoc.getLongitude(); // 真实经度 String realLocCoorType = realLoc.getCoorType(); // 真实位置坐标系 } } }
5第五步,获取定位经纬度
调用LocationClient的start()方法,发起请求,在BDAbstractLocationListener接口中,便可获得。
详细信息请参考获取经纬度中第五步的介绍。
示例Demo
https://mapopen-pub-androidsdk.cdn.bcebos.com/location/anti-cheating/FZBdemo2.mp4