简介

定位服务采用GPS、Wi-Fi、基站等多途径的混合定位模式进行定位,赋予应用开发者快速、精准地获取用户位置信息的能力,构建全球定位服务能力,助力开发者发展全球业务。在本次Codelab中,您将调用Location Kit定位服务能力创建一款Android 应用程序(Codelab App)。本应用程序的基本架构如图所示:Codelab App将集成Location SDK,然后通过Location SDK去调用HMS Core (APK)的定位服务能力。

您将建立什么

在这个Codelab中,您将创建一个获取设备位置信息的App。

您将会学到什么

硬件要求

软件要求

通过Android Studio的Marketplace安装

打开Android Studio,进入"File > Settings > Plugins > Marketplace",在搜索框中输入"HMS Toolkit",然后点击"Installed"进行安装。安装完成后,重启Android Studio。

通过本地导入插件包进行安装

  1. 下载HMS Toolkit工具包
  2. 打开Android Studio,进入"File > Settings > Plugins",选择Install Plugin from Disk进行安装。安装完成后,请重启Android Studio。

AppGallery Connect配置

在开发应用前,您需要在AppGallery Connect中创建应用,并设置应用的相关信息。

1. 使用华为帐号登录AppGallery Connect。如未注册,可参见帐号注册认证进行注册。
2. 参见创建项目在项目下创建应用完成应用的创建,特殊配置如下。

配置完成后,无需根据界面向导进行下一步操作,按照Configuration Wizard配置进行操作,工具会自动进行设置。

Configuration Wizard配置

在调用HMS Core各Kit能力前,您还需要设置各Kit使用的依赖信息,请根据工具向导进行设置和检查。

1. 在Android Studio中,点击菜单栏中的"HMS > Configuration Wizard"。

2. 登录授权后,您可以选择团队名称、对应的工程模块、需要使用的Kit(支持多选,建议每次不超过5个Kit)和证书类型,然后点击"Start"。

关于证书类型说明如下:

选择该方式后,您可以选择已有的证书文件,也可以选择创建一个新的证书。关于证书的指导可参见Android证书签名

3. HMS Toolkit会对该Kit的使用环境和是否支持场景化接口调用进行检查,包括通用环境配置检查和各Kit专用环境配置检查。

4. HMS Toolkit会自动进行处理,并逐项检查是否配置正确。

配置混淆脚本

如果开发者使用了AndResGuard,需要在混淆配置文件proguard-rules.pro中加入AndResGuard允许清单。

"R.string.hms*", "R.string.connect_server_fail_prompt_toast", "R.string.getting_message_fail_prompt_toast", "R.string.no_available_network_prompt_toast", "R.string.third_app_*", "R.string.upsdk_*", "R.layout.hms*", "R.layout.upsdk_*", "R.drawable.upsdk*", "R.color.upsdk*", "R.dimen.upsdk*", "R.style.upsdk*"

Coding Assistant为Location接入提供了API接口和代码样例,方便开发者快速集成。集成方法有如下两种:

以"Location Service Development Procedure(定位服务开发处理)"为例,分别介绍场景集成、API接口调用,其他场景操作同定位服务开发处理场景类似。

场景集成

通过"HMS > Coding Assistant"或者在工具栏中点击如下图标打开Coding Assistant,然后在Kit列表中点击"Location Kit",显示如下图所示的Location场景列表。

当需要调用"Location Service Development Procedure"场景时,在场景列表中找到对应的场景卡片,然后将场景卡片拖拽到代码编辑区。在拖动场景卡片的同时,工具会自动生成对应的Activity文件和xml布局文件,并在AndroidManifest、工程下的build.gradle和模块下的build.gradle文件中写入配置信息和工程运行所需要的依赖。
如果需要打开对应场景的Activity,需要您在代码中主动调用该Activity,调用完成后,您可以直接在设备中运行应用。

API接口调用

当不需要场景集成方式时,您可以在对应的API接口列表中,点击某一个API接口进入详情页,然后选择拖拽的方式将接口对应的代码样例片段拖到代码中,这种方式需要您知道拖拽代码的位置。同样的,工具会自动在工程下的build.gradle和模块下的build.gradle文件中写入工程运行所需要的依赖。
点击"Location Service Development Procedure"图标进入API接口详情界面,详情界面展示了集成所需要调用API的功能介绍。

根据详情界面的API功能介绍,通过"拖拽"或者"复制"代码块的方式,将API代码放到相应的代码中。

指定应用权限

  1. Android提供了两种位置权限: ACCESS_COARSE_LOCATION(粗略的位置权限)和ACCESS_FINE_LOCATION(精确的位置权限)。需要在Manifest文件中申请权限,点击复制,添加到Manifest文件中。
  2. 在Android Q版本中,如果您需要应用程序在后台执行时也具备持续定位能力,需要在Manifest文件中申请ACCESS_BACKGROUND_LOCATION权限,点击复制按钮,手动复制添加。
  3. 在Manifest中添加后,还要在代码中动态申请一下权限(Android 6.0危险权限要求),拖拽或复制粘贴添加到RequestLocationUpdatesWithCallbackActivity.Java文件,后续步骤均往RequestLocationUpdatesWithCallbackActivity.Java文件添加Java代码。

创建定位服务客户端

在该Activity的onCreate()方法中创建一个FusedLocationProviderClient实例,通过该实例调用定位相关接口,拖拽或复制粘贴添加。

检查设备定位设置

设备的相关定位设置会影响定位服务的定位结果,例如位置开关选项处于关闭状态时,将无法获取到位置信息。因此,建议您在持续获取位置信息之前,先检查设备设置是否满足定位条件。定位服务提供了检查设备定位相关设置的能力,通过LocationServicesgetSettingsClient(Activity activity)获取SettingsClient实例,然后调用checkLocationSettings(LocationSettingsRequest locationSettingsRequest)接口获取定位设置结果,当设置不满足定位条件时,将为您提供解决方案以提示用户打开对应的权限(HMS Core定位权限必须打开,Android Q版本必须选择"始终允许")。

  1. 获取SettingsClient的服务接口,拖拽或复制粘贴添加。
  2. 调用checkLocationSettings()检查设备设置,拖拽或复制粘贴添加。

持续获取位置信息

如果您希望应用可以持续获取设备位置,可以使用定位服务提供的requestLocationUpdates()接口。该接口根据入参形式的不同,将以两种不同的形式将位置信息返回。一种是通过调用您已经定义的LocationCallback类中onLocationResult()回调方法返回一个包含位置信息的LocationResult对象,另一种是将位置信息置于PendingIntent扩展信息中返回。

当您的应用程序不再需要接收位置更新时,应当停止位置更新,以便于降低功耗。要停止位置更新,可以调用removeLocationUpdates(),传入与requestLocationUpdates()接口相对应的LocationCallback或PendingIntent对象。这里以回调方式作为样例,代码如下。详细的参数说明请参见Location接口说明

  1. 设置持续定位请求参数,拖拽或复制粘贴添加。
  2. 定义位置更新回调,拖拽或复制粘贴添加。
  3. 调用requestLocationUpdates()进行持续定位,拖拽或复制粘贴添加。
  4. 调用removeLocationUpdates()停止位置更新,拖拽或复制粘贴添加。

获取最后的已知位置

使用定位服务API,您的应用程序可以获取设备最后的已知位置,大多情况下,该位置即为设备的当前位置。调用getLastLocation()方法获取最后的已知位置的代码样例如下,拖拽或复制粘贴添加。

使用模拟位置信息功能

具体操作步骤:打开"设置 > 系统和更新 > 开发人员选项 > 选择模拟位置信息应用 > 选择要mock的应用"(如果没有发现"开发人员选项",请执行如下操作:"设置 > 关于手机 > 版本号",连续点击"版本号"7次,"开发人员选项"会出现在"系统与更新"页面,再重复上述操作),代码开发步骤如下:

  1. 在AndroidManifest.xml文件中配置模拟定位权限。
  2. 设置mock模式,调用setMockMode(boolean isMockMode) ,拖拽或复制粘贴添加。
  3. 设置模拟位置信息,调用setMockLocation(Location mockLocation) ,拖拽或复制粘贴添加

    最后主Activity需要调用该集成Location Kit的RequestLocationUpdatesWithCallbackActivity

完成上述代码后,可以使用Toolkit中的Cloud Debugging 来进行真机调试,具体可以参见Huawei Toolkit Cloud Debugging

使用远程真机运行

在菜单栏中选择"HMS > Cloud Debugging"或者在工具栏点击如下图标。

在远程真机界面,您可以根据手机的分辨率、Android版本、EMUI版本及华为手机系列等条件,筛选出需要远程调试的真机,也可以根据真机的状态"Available Devices"进行筛选。


点击选择的设备,在菜单栏中点击/Debug按钮,在远程真机调试运行App。

使用本地真机运行

使用Android Studio连接本地的真机运行测试即可。

在本次codelab 中, 您可以点击请求位置更新按钮,并将位置信息打印到当前界面。

干得好,你已经成功完成了Codelab并学到了:

如需了解更多与Location Kit相关的信息,请关注我们的官方网站。开发过程中如果遇到问题,请参见常见问题解答

您可以阅读下面链接,了解更多相关的信息。

Location Kit相关文档

HMS Toolkit的操作指南

也可以点击下方按钮下载源码:

源码下载

已复制代码