所有文档
开发指南
挖掘各类模拟定位方式对百度定位SDK内部信息的影响特征,综合多源数据信息,有效识别模拟卫星定位结果,为签到、运动、出行、游戏等场景的位置真实性提供有力保障。
在签到类场景中,如果设置了单次定位setOnceLocation(true),则不会返回卫星定位结果,不需进行防定位作弊配置。
防定位作弊配置具体步骤如下:
在使用定位SDK进行具体开发工作之前,需获取密钥(AK), 并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。 此外, Google在Android 6.0中引入了动态权限获取机制,开发者在使用定位SDK之前, 请详细了解关于Android 6.0系统开发须知。
请在主线程中声明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);//注册监听函数}
要实现定位防作弊功能,需要利用LocationClientOption类配置定位SDK参数。
核心代码及注释说明如下:
LocationClientOption option = new LocationClientOption();option.setScanSpan(1000);//可选,设置发起定位请求的间隔,int类型,单位ms//如果设置为0,则代表单次定位,即仅定位一次,默认为0option.setOpenGnss(true);//可选,设置是否使用卫星定位,默认false//使用高精度和仅用设备两种定位模式的,参数必须设置为trueoption.setCoorType("bd09ll");//可选,设置返回经纬度坐标类型,默认GCJ02//GCJ02:国测局坐标;//BD09ll:百度经纬度坐标;//BD09:百度墨卡托坐标;//海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标option.setEnableSimulateGnss(false);//可选,设置是否需要过滤卫星定位仿真结果,默认需要,即参数为falsemLocationClient.setLocOption(option);//mLocationClient为第二步初始化过的LocationClient对象//需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用//更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
Android定位SDK自V7.2版本起,对外提供了Abstract类型的监听接口BDAbstractLocationListener, 用于实现定位监听。原有BDLocationListener暂时保留, 推荐开发者升级到Abstract类型的新监听接口使用, 该接口会异步获取定位结果,核心代码如下:
public class MyLocationListener extends BDAbstractLocationListener{@Overridepublic void onReceiveLocation(BDLocation location){//此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果//以下只列举部分获取位置描述信息相关的结果//更多结果信息获取说明,请参照类参考中BDLocation类中的说明double latitude = location.getLatitude(); //获取纬度信息double longitude = location.getLongitude(); //获取经度信息float radius = location.getRadius(); //获取定位精度,默认值为0.0fString coorType = location.getCoorType();//获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准int errorCode = location.getLocType();// 获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明int strategy = location.getMockGnssStrategy();// 防作弊策略识别码,用于辅助分析排查问题int probability = location.getMockGnssProbability();// 此定位点作弊概率,3代表高概率,2代表中概率,1代表低概率,0代表概率为0BDLocation realLoc = location.getReallLocation();if (location.getMockGnssStrategy() > 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();// 真实位置坐标系}}}
调用LocationClient的start()方法,发起请求,在BDAbstractLocationListener接口中,便可获得。 详细信息请参考获取经纬度中第五步的介绍。
上一篇
下一篇
本篇文章对您是否有帮助?