对于儿童和老人来说,可穿戴智能手表非常好用。市场上也有很多类似的产品,支持拨打接听电话、扫码支付、定位等功能,是新兴的商机。鸿蒙手表依托华为品牌,也致力于为用户打造高品质、高品质、可穿戴的智能体验。在这方面,HMSCore定位服务(LocationKit)可以提供融合定位、活动识别和地理围栏三大能力。接下来,小编就请开发者通过简单快捷的几个步骤,在鸿蒙手表上体验定位服务开发的定位功能。1、定位服务的优势与局限定位低功耗:利用芯片实现地理围栏,功耗更低。高精度定位:优化城市峡谷下道路两侧定位精度,精度高。基于RTK(Real-timekinematic)技术,实现空旷地区亚米级高精度定位能力。最新版SDK需要用户手机安装HMSCore(APK)6.0.0及以上版本。如果未安装,或安装了其他版本的HMSCore(APK),功能可正常使用,但不支持自动升级版本。HarmonyOS通过数字证书和配置文件来控制应用程序。只有经过签名的HarmonyOSAbilityPackages(以下简称“HAP”)才允许在设备上安装运行。2、Demo介绍为了让开发者更好的理解鸿蒙手表定位功能的实现,这里给出一个简单的集成案例,请大家用简单的代码运行一下demo。代码能力包括请求回调位置函数、获取缓存位置信息、查询位置信息是否可用、检查设置权限等。3.开发实践下面为开发者介绍如何根据源码运行此Demo,以便了解实施细节。开发准备一、工具准备测试设备HarmonyOS2.0及以上华为智能手表开发工具DevEcoStudio2.1.0.201及以上二、开发前准备1)注册华为开发者,在华为应用市场创建应用参考位置服务开发准备创建你的申请。2)生成数字证书和Profile文件的具体步骤包括:申请应用调试证书、注册调试设备、申请调试Profile、配置签名信息。3)生成签名证书指纹并配置签名证书指纹。4)集成HMSCoreSDK?下载AGC的agconnect-services.json文件到本地,放在应用级根目录“entry\src\main\resources\rawfile”下。?在文件头声明下方的行中添加以下配置应用插件:'com.huawei.agconnect'。项目级“build.gradle”文件,添加Maven仓库地址和agconnect服务依赖。buildscript{repositories{maven{url'https://repo.huaweicloud.com/repository/maven/'}//配置HMSCoreSDK的Maven仓库地址maven{url'https://developer.huawei.com/repo/'}jcenter()}dependencies{classpath'com.huawei.ohos:hap:2.4.4.2'//添加agconnect服务依赖classpath'com.huawei.agconnect:agcp-harmony:1.1.0.300'classpath'com.huawei.ohos:decctest:1.2.4.0'}}allprojects{repositories{maven{url'https://repo.huaweicloud.com/repository/maven/'}//配置HMSCoreSDK的Maven仓库地址maven{url'https://developer.huawei.com/repo/'}jcenter()}}在应用级的build.gradle文件中添加依赖(实际中根据需要设置版本号)或者将LocationKit的har包放在本地“libs”目录。dependencies{implementation'com.huawei.hms:location-ohos:6.0.0.300'//agconnect依赖组件implementation'com.huawei.agconnect:agconnect-core-harmony:1.1.0.300'}?混淆代码,打开应用层在根目录下的混淆配置文件“proguard-rules.pro”中添加排除HMSCoreSDK的混淆配置。运行示例应用展示效果1.声明系统权限在“config.json”文件中的“reqPermissions”字段添加如下权限HarmonyOS提供了两种位置权限:ohos.permission.LOCATION(位置权限)和ohos.permission.LOCATION_IN_BACKGROUND(后台位置权限)。请注意,还需要网络权限。"reqPermissions":[{"reason":"getLocalLocation","name":"ohos.permission.LOCATION","usedScene":{"ability":["com.huawei.codelab.MainAbility",],"when":"always"}},{"name":"ohos.permission.GET_NETWORK_INFO"},{"name":"ohos.permission.LOCATION_IN_BACKGROUND"}在代码中动态申请“ohos.permission.LOCATION”和“ohos.permission.LOCATION_IN_BACKGROUND”权限//以位置权限为例if(verifySelfPermission("ohos.permission.LOCATION")!=IBundleManager.PERMISSION_GRANTED){printLog(HiLog.INFO,TAG,"Self:LOCATIONpermissionnotgranted!");if(canRequestPermission("ohos.permission.LOCATION")){printLog(HiLog.INFO,TAG,"Self:可以在这里请求权限");requestPermissionsFromUser(newString[]{"ohos.permission.LOCATION"},REQUEST_CODE);}else{printLog(HiLog.WARN,TAG,"Self:entersettingstosetpermission");}}else{printLog(HiLog.INFO,TAG,"Self:LOCATIONpermissiongranted!");}关键代码说明1.创建位置服务客户端在基类BaseAbilitySlice的onStart()方法中创建一个FusedLocationProviderClient实例,通过该实例调用位置相关接口publicFusedLocationProviderClientfusedLocProviderClient;@OverrideprotectedvoidonStart(Intentintent){super.onStart(intent);fusedLocProviderClient=newFusedLocationClient(this);}2.查看设备的位置设置,调用LocationRequest设置位置请求参数(包括设置位置更新间隔(毫秒:单位),权重,用于返回地址信息等的语言),以及在请求回叫之前调用位置服务以检查与位置相关的设置。privatevoidcheckLocationSettings(){LocationRequestlocationRequest=newLocationRequest();locationRequest.setPriority(100);LocationSettingsRequest.Builderbuilder=newLocationSettingsRequest.Builder();LocationSettingsRequestrequest=builder.addLocationRequest(locationRequest).setAlwaysShow(false).setNeedBle(false).build();settingsClient.checkLocationSettings(request).addOnSuccessListener(response->{//设置定位成功条件}).addOnFailureListener(exp->{//设置不满足定位条件});}3.定位函数相关实现步骤调用requestLocationUpdates()进行连续定位。fusedLocProviderClient.requestLocationUpdates(locationRequest,locationCallback).addOnSuccessListener(var->{//接口调用成功的处理}).addOnFailureListener(e->{//接口调用失败的处理});调用removeLocationUpdates()停止位置更新。//注意:停止位置更新时,mLocationCallback和requestLocationUpdates()中的LocationCallback参数是同一个对象。fusedLocProviderClient.removeLocationUpdates(locationCallback).addOnSuccessListener(var->{//接口调用成功的处理}).addOnFailureListener(e->{//接口调用失败的处理});定义位置更新回调。LocationCallbacklocationCallback=newLocationCallback(){@OverridepublicvoidonLocationResult(LocationResultlocationResult){if(locationResult!=null){//处理位置回调结果}}@OverridepublicvoidonLocationAvailability(LocationAvailabilitylocationAvailabilityAvailabilityAvailability){ailsuperide;if(locationAvailability!=null){//处理定位状态}}};相关参数说明1.设置定位类型,如果请求GNSS定位,则值为100;如果请求网络位置,则值为102或104;不需要主动请求位置,只需要被动接收位置,所以取值为105。2、定位设置的语言。目前仅支持EN和CN。3.SetNumUpdates回调请求位置的数量。如果值为3,则只会向客户端发送3个回调。如果要一直回拨,尽量使用默认值。更多HMSCore位置服务详情请参考:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/introduction-0000001050706106?ha_source=hms1华为开发者联盟官网:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/harmonyos-introduction-0000001121618904?ha_source=hms1下载demo和示例代码请到Github:https://github.com/HMS-Core/hms-location-demo-harmonyos解决集成问题,请到StackOverflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest了解更多详情>>访问华为开发者联盟官网开发指导文件华为移动服务开源仓库地址:关注我们的GitHub和Gitee,了解HMSCore的最新技术资讯~
