定位服务采用GPS、Wi-Fi、基站等多途径的混合定位模式进行定位,赋予应用开发者快速、精准地获取用户位置信息的能力,构建全球定位服务能力,助力开发者发展全球业务。在本次Codelab中,您将调用Location Kit定位服务能力创建一款Android 应用程序(Codelab App)。本应用程序的基本架构如图所示:Codelab App将集成Location SDK,然后通过Location SDK去调用HMS Core (APK)的定位服务能力。
在这个Codelab中,您将创建一个获取设备位置信息的App。
打开Android Studio,进入"File > Settings > Plugins > Marketplace",在搜索框中输入"HMS Toolkit",然后点击"Installed"进行安装。安装完成后,重启Android Studio。
在开发应用前,您需要在AppGallery Connect中创建应用,并设置应用的相关信息。
1. 使用华为帐号登录AppGallery Connect。如未注册,可参见帐号注册认证进行注册。
2. 参见创建项目和在项目下创建应用完成应用的创建,特殊配置如下。
配置完成后,无需根据界面向导进行下一步操作,按照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接口进入详情页,然后选择拖拽的方式将接口对应的代码样例片段拖到代码中,这种方式需要您知道拖拽代码的位置。同样的,工具会自动在工程下的build.gradle和模块下的build.gradle文件中写入工程运行所需要的依赖。
点击"Location Service Development Procedure"图标进入API接口详情界面,详情界面展示了集成所需要调用API的功能介绍。
根据详情界面的API功能介绍,通过"拖拽"或者"复制"代码块的方式,将API代码放到相应的代码中。
在该Activity的onCreate()方法中创建一个FusedLocationProviderClient实例,通过该实例调用定位相关接口,拖拽或复制粘贴添加。
设备的相关定位设置会影响定位服务的定位结果,例如位置开关选项处于关闭状态时,将无法获取到位置信息。因此,建议您在持续获取位置信息之前,先检查设备设置是否满足定位条件。定位服务提供了检查设备定位相关设置的能力,通过LocationServices的getSettingsClient(Activity activity)获取SettingsClient实例,然后调用checkLocationSettings(LocationSettingsRequest locationSettingsRequest)接口获取定位设置结果,当设置不满足定位条件时,将为您提供解决方案以提示用户打开对应的权限(HMS Core定位权限必须打开,Android Q版本必须选择"始终允许")。
如果您希望应用可以持续获取设备位置,可以使用定位服务提供的requestLocationUpdates()接口。该接口根据入参形式的不同,将以两种不同的形式将位置信息返回。一种是通过调用您已经定义的LocationCallback类中onLocationResult()回调方法返回一个包含位置信息的LocationResult对象,另一种是将位置信息置于PendingIntent扩展信息中返回。
当您的应用程序不再需要接收位置更新时,应当停止位置更新,以便于降低功耗。要停止位置更新,可以调用removeLocationUpdates(),传入与requestLocationUpdates()接口相对应的LocationCallback或PendingIntent对象。这里以回调方式作为样例,代码如下。详细的参数说明请参见Location接口说明。
使用定位服务API,您的应用程序可以获取设备最后的已知位置,大多情况下,该位置即为设备的当前位置。调用getLastLocation()方法获取最后的已知位置的代码样例如下,拖拽或复制粘贴添加。
具体操作步骤:打开"设置 > 系统和更新 > 开发人员选项 > 选择模拟位置信息应用 > 选择要mock的应用"(如果没有发现"开发人员选项",请执行如下操作:"设置 > 关于手机 > 版本号",连续点击"版本号"7次,"开发人员选项"会出现在"系统与更新"页面,再重复上述操作),代码开发步骤如下:
设置模拟位置信息,调用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并学到了:
您可以阅读下面链接,了解更多相关的信息。
也可以点击下方按钮下载源码: