简介
利用定位SDK,不仅可以获取室外定位的经纬度信息、周边POI信息等,也可以获取室内建筑的定位信息。
目前百度已覆盖全国4000多家火车站、机场、商场、客运汽车站、博物馆、综合医院、图书馆等多种场景,利用三角定位技术、增强Wi-Fi指纹模型技术、地磁技术、蓝牙技术等,提供精度1-3m的室内精准定位服务。
注:如百度未覆盖您的室内地图数据、室内店铺等信息变更第一时间更新定位信息,或其他室内图室内定位相关需求,您可以联系我们。
百度也提出了室内定位生态联盟,邀请各行各业的开发者一起联合提升室内定位精度。
使用百度定位SDK室内定位功能步骤如下:
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参数
使用百度定位sdk的室内定位功能无需特别配置,初始化过程跟使用普通定位模式是完全一样的,配置好之后,调用mLocationClient.start()即可。
因为支持百度高精度室内定位的地点是有限的,因此要想开启室内定位模式,必须先要判断哪里支持室内定位,在支持的地方开启才是有用的。
因为支持百度高精度室内定位的地点是有限的,因此要想开启室内定位模式,必须先要判断哪里支持室内定位,在支持的地方开启才是有用的。
4第四步,判断支持室内定位地点并开启室内定位模式
开发者可以通过回调的BDLocation中的getFloor()是否为空,判断当前是否已经处于室内定位区域。核心代码如下:
public LocationClient mLocationClient = null; public class MyLocationListener extends BDAbstractLocationListener{ @Override public void onReceiveLocation(BDLocation location){ //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果 if (location.getFloor() != null) { // 当前支持高精度室内定位 String buildingID = location.getBuildingID();// 百度内部建筑物ID String buildingName = location.getBuildingName();// 百度内部建筑物缩写 String floor = location.getFloor();// 室内定位的楼层信息,如 f1,f2,b1,b2 mLocationClient.startIndoorMode();// 开启室内定位模式(重复调用也没问题),开启后,定位SDK会融合各种定位信息(GPS,WI-FI,蓝牙,传感器等)连续平滑的输出定位结果; } } }
在普通定位模式下,实际上开发者也会收到floor不为空的location结果,只不过需要调用startIndoorMode()方法,开启针对高精度室内定位专门优化过的定位模式,该模式开启后,可以对外输出连续、平滑的室内定位结果,极大优化用户室内定位体验与效果。
5第五步,关闭室内定位模式
调用mLocationClient.stopIndoorMode()方法即可。