获取室内位置 最后更新时间: 2021年01月22日
1、定位配置
运用定位引擎实现室内定位,就必须提前设置好一些定位需要的参数,必须在定位最开始的时候设置进去,一旦设置之后配置将不能再修改,直到用户销毁定位模块。
配置模块使用Builder模式用来构建,首先创建Configuration.Builder的对象,然后调用对象的一系列set方法设置各种参数,最后调用build() 方法构造最后的配置对象,设置给定位引擎。
客户端需要关注的设置选项参数说明:
参数 | 类型 | 说明 |
---|---|---|
setLBSParam | String | 设置访问服务时需要的参数KEY |
setLocationProvider | LocationProvider | 选择是蓝牙/还是WIFI,【WIFI|BLE】,【FUSION_WIFI_BLE】 暂不支持 |
示例代码:
Configuration.Builder mConfigBuilder=new Configuration.Builder(context);
LocationManager.getInstance().init(mConfigBuilder.build());
用户也可以如上直接创建对象,SDK会直接提供一组相关的默认值。
此外,在开发过程中,如果开发者所处环境不支持室内定位,那么我们可以通过模拟定位方式来测试开发应用的定位效果。
要使用模拟定位,首先需要下载 “模拟定位日志文件” ,或者从Android室内定位SDK的“相关下载”页面下载(https://lbs.amap.com/api/android-indoorlocation-sdk/download/),保存在手机上,然后把详细路径设置到配置对象的public String mSimulateFile 成员上,这样,再次启动定位的时候,SDK将使用模拟文件进行测试。
说明:模拟定位日志文件,暂提供“北京太阳宫凯德mall(B000A8WAWL)”的WIFI和蓝牙两种定位方式日志文件,以供模拟调试使用。
2、定位模块
定位模块根据客户端采集的信息进行定位服务。
创建对象
只需要把indoorutil.jar、indoorpdr.jar和onlinelocation.jar几个jar包引入进来,同时包含libindoorpdr.so和libonlinelocation.so两个so库即可。在创建定位定位引擎的时候使用onlinelocation.jar中的LocationManager.getInstance()。
引擎初始化
函数体:
public void init(String bid, final Configuration config, final Handler initHandler);
功能诠释:
初始化的室内定位模块。
参数诠释:
参数 | 类型 | 说明 |
---|---|---|
bid | String | 要进行的室内定位建筑,如果是纯在线定位这个参数可以为空, 为空的时候引擎做粗定位,成功之后会把建筑bid返回。 如果不为空则表示在本建筑之内进行室内定位; |
config | Configuration | 配置信息,如之前所述。 |
initHandler | Handler | 初始化结果handler, 初始化过程中的一些错误和处理结果都通过这个回调函数返回过来。 可能的消息有: MessageCode.MSG_THREAD_PREPARED、MSG_WIFI_NOT_ENABLED等。 |
示例代码:
ILocationManager mLocationManager;
// 获取到实例
mLocationManager = LocationManager.getInstance();
SDKInitHandler mSDKInitHandler = new SDKInitHandler(this);
// 初始化定位引擎
mLocationManager.init(this.strBuildNameId, mConfigBuilder.build(), mSDKInitHandler);
3、销毁定位模块
函数体:
public void destroy();
功能诠释:
释放所有定位相关资源,并停止、销毁室内定位引擎。
用法备注:
销毁之后,室内定位引擎将不能再被使用,用户需要重新初始化定位引擎。
4、监听/停止监听定位
函数体:
public void requestLocationUpdates(Handler handler); public void removeUpdates(Handler handler)
功能诠释:
注册或删除定位监听,参数handler是回调接口,定位引擎发送定位结果、定位错误等信息到这个handler。在第一次添加监听的时候,引擎会自动启动定位服务,当最后一个监听被删除之后,引擎将自动停止定位模块。
示例代码:
设置监听:
mLocationManager.requestLocationUpdates(mInnerHandler);
取消监听:
mLocationManager.removeUpdates(mInnerHandler);
5、定位结果
定位成功之后,引擎发送消息MSG_REPORT_LOCATION或MSG_REPORT_ONLINE_LOCATION给上层,其中定位结果以LocationResult对象方式保存在msg.obj中。
参数诠释:
参数 | 数据类型 | 说明 |
---|---|---|
x | double | 经度 |
y | double | 纬度 |
z | int | 楼层 |
r | float | 精度,单位米 |
a | float | 角度,单位度(0-360) |