开发 Android 室内定位SDK 入门指南

入门指南 最后更新时间: 2021年01月22日

本指南是向 Android 应用添加室内地图的快速入门指南。

第 1 步:下载并安装 Android Studio

按照 Android Studio 编译器安装指南下载安装 Android Studio。(注:下载地址为Google官方网站)

第 2 步:获取高德Key

使用高德室内地图 SDK 需要您在官网控制台获取Key

如果您第一次使用,可以按照获取 Key 指南注册生成高德 Key。

第 3 步:创建项目

按以下步骤新建一个 Empty Activity 的应用项目。

 

  1. 启动 Android Studio。如果您看到 Welcome to Android Studio 对话框,请选择 Start a new Android Studio project,否则,请点击 Android Studio 菜单栏中的 File,然后点击 New->New Project,按提示输入您的应用名称、公司域和项目位置。 然后点击 Next。
  2. 选择您的应用所需的机型。 如果您不能确定自己的需要,只需选择 Phone and Tablet。然后点击 Next。
  3. 在“Add an activity to Mobile”对话框中选择 Empty Activity。 然后点击 Next。
  4. 按提示输入 Activity 名称、布局名称和标题。 使用默认值即可。 然后点击 Finish。

第 4 步:下载并安装定位开发包

官网下载按照需求下载开发包并解压。

解压后,会得到一个jar文件,请您将jar文件添加到工程中,操作步骤请参考开发指南的 Android Stuido  jar 文件安装步骤。

第 5 步:Hello AMapindoorLocation!

请查看 Android Studio 项目中的下列文件。

1、配置 AndroidManifest.xml 文件

默认情况下,AndroidManifest.xml 位于所设置项目目录main文件下。主要用于配置申请权限:

在AndroidManifest.xml中配置权限:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

2、实现定位

定位功能分成三个阶段来进行:

首先,需要对定位引擎进行初始化,初始化成功之后,定位引擎会在后台开启一个定位线程用于执行定位请求。

然后,当初始化定位线程成功反馈消息给客户端之后,客户端再注册一个监听handler,用于接收定位线程返回的结果。

最后,如果用户不再使用定位的时候,可以取消注册,甚至直接销毁定位引擎。

1)初始化定位引擎

初始化的时候,我们需要提供一个配置信息,最主要的两项配置是用户定位类型是wifi还是蓝牙,以及用户申请的Key。

代码如下:

Configuration.Builder mConfigBuilder= new Configuration.Builder(context);
mConfigBuilder.setLocationProvider(Configuration.LocationProvider.WIFI);
mConfigBuilder.setLBSParam("xxxxxx");

配置对象构建完成之后,我们执行具体的初始化工作。

代码如下:


ILocationManager mLocationManager = OnlineLocator.getInstance();
mLocationManager.init(strBuildNameId, mConfigBuilder.build(), mSDKInitHandler);

其中, strBuildNameId 是建筑物的ID,如果用户不知道当前所在建筑的id,可以提供一个空字符串,此时定位引擎首先进行去定位用户所在的建筑物,定位到建筑物之后再进一步的进行室内定位。

mSDKInitHandler是用户创建的一个handler,用于接收初始化的结果,因为初始化工作需要创建另外一个线程,所以我们通过handler机制来接收异步的初始化结果。

Handler示例如下:

private static class SDKInitHandler extends Handler {
    private final WeakReference<OnlineActivity> mParent;
    public SDKInitHandler(OnlineActivity parent) {
        mParent = new WeakReference<>(parent);
    }
    @Override
    public void handleMessage(Message msg) {
        final OnlineActivity parent = mParent.get();
        if (parent == null ) {
            return;
        }
        parent.mIsLocating = false;
        parent.mTextView2.setText("初始化失败");
        if (msg.what == MessageCode.MSG_THREAD_PREPARED){
            //初始化成功,请注册位置回调"
        }
        else {
            // 初始化失败
        }
    }
}   

2)添加监听

在上一步获取到初始化成功之后我们就可以注册一个监听:

mLocationManager.requestLocationUpdates(mInnerHandler);

其中参数mInnerHandler,是用于处理返回定位结果,举例如下:

private static class InnerHandler extends Handler {
    private final WeakReference<OnlineActivity> mParent;
    public InnerHandler(OnlineActivity parent) {
        mParent = new WeakReference<OnlineActivity>(parent);
    }
    @Override
    public void handleMessage(Message msg)
    {
        OnlineActivity mParent = this.mParent.get();
        if (mParent == null)
            return;
        switch (msg.what) {
            case MessageCode.MSG_REPORT_ONLINE_LOCATION: {
                LocationResult result = (LocationResult)msg.obj;
                // result中保存了定位的结果的经纬度坐标以及楼层信息等。
                break;
            }case MessageCode.MSG_ONLINE_BUILDING_LOCATED:{
                mParent.strBuildNameId =(String)msg.obj;
                // 如果在初始化的时候用户没有指定建筑物bid,当定位到建筑物成功之后,首先会收到建筑定位成功消息
                break;
            }
        }
    }
}

3) 取消监控及销毁引擎

当用户不再使用室内定位的时候,可以调用下面的接口取消监听,此时如果没有没有任何监听客户端在监听室内定位,引擎将停止wifi或者蓝牙扫描,减少系统的功耗。当用户后面再需要室内定位的时候,重新注册一下即可。

mLocationManager.removeUpdates(mInnerHandler);

如果以后都不再使用的时候,调用下面接口直接销毁定位引擎。后面如果需要使用定位引擎,就必须重新进行初始化引擎以及注册监听。一般当用户在wifi定位和蓝牙定位之间切换的时候,需要执行一次销毁操作。

mLocationManager.destroy();

第 6 步:连接 Android 设备

了解您的应用实际运行情况的最简单方法是将 Android 设备与计算机相连。 按照说明在您的 Android 设备上启用开发者选项,并配置您的应用和系统以检测设备。

因为室内定位需要扫描wifi或者蓝牙信息,一般不建议在Android模拟器上进行测试,在模拟器上会导致定位失败。

第 7 步:构建和运行您的应用

在 Android Studio 中,点击 Run 菜单选项(或 play 按钮图标)运行您的应用。

提示您选择设备时,选择下列选项之一:

选择与您的计算机相连的 Android 设备,点击 OK。 Android Studio 将调用 Gradle 构建您的应用,然后在设备显示结果。应用打开可能需要几分钟的时间。

后续步骤

您可能想观摩一些示例代码,可以前往相关下载下载官方示例Demo。

或者您也可以前往开发指南,阅读更多相关内容。

返回顶部 示例中心 常见问题 智能客服 公众号
二维码