針對兒童和老人,可穿戴的智能手表用處很大,市場也有許多類似的產品,支持接打電話、支付掃碼、定位等功能,屬于新興的商業機會,依托華為品牌,鴻蒙手表也致力為用戶打造精品的、產品質量佳、可穿戴的智能體驗,對此,HMS Core 定位服務(Location Kit)可以提供三個主要能力,包括融合定位、活動識別和地理圍欄,接下來,小編邀請開發者們通過簡單快速的幾步,體驗定位服務在鴻蒙手表上開發的定位功能,
一、 定位服務的優勢和限制
-
定位低功耗:利用芯片實作地理圍欄,功耗更低,
-
定位高精度:優化城市峽谷下道路兩側的定位準確率,準確率高,基于RTK(Real - time kinematic)技術,實作開闊地亞米級高精定位能力,
-
最新版本SDK需要用戶手機上安裝HMS Core(APK)6.0.0以上版本,若未安裝,或安裝了其他版本的HMS Core(APK),功能可以正常使用,但不支持版本自動升級,
-
HarmonyOS通過數字證書和Profile檔案來對應用進行管控,只有簽名過的HarmonyOS Ability Package(以下簡稱“HAP”)才被允許安裝到設備上運行,

二、 Demo介紹
為了讓開發者更好的了解鴻蒙手表定位功能的實作,這里提供了一個簡單的集成案例,邀請大家用簡單的代碼運行Demo,代碼能力包括請求回呼定位功能,獲取快取定位資訊,查詢定位資訊是否可用及檢查設定權限等,
三、 開發實戰
下面為開發者們介紹如何根據源代碼將這個Demo運行起來,以便于了解實作細節,
開發準備
1. 工具準備
測驗設備 HarmonyOS 2.0及以上的華為智能手表
開發工具 DevEco Studio 2.1.0.201及以上
2. 開發前準備
- 注冊成為華為開發者,創建一個應用
參考定位服務開發準備在華為應用市場創建一個您的應用,
- 生成數字證書和Profile檔案
詳細步驟包括申請應用除錯證書、注冊除錯設備和申請除錯Profile ,配置簽名資訊,
-
生成簽名證書指紋 ,配置簽名證書指紋,
-
集成HMS Core SDK
? 將AGC的agconnect-services.json檔案下載到本地,并放應用級根目錄 “entry\src\main\resources\rawfile” 路徑下,
? 在檔案頭部宣告下一行添加如下配置apply plugin: 'com.huawei.agconnect'. 專案級“build.gradle”檔案,添加Maven倉地址和agconnect服務依賴,
buildscript {
repositories {
maven {url 'https://repo.huaweicloud.com/repository/maven/'}
// 配置HMS Core SDK的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/'}
// 配置HMS Core SDK的Maven倉地址
maven {url 'https://developer.huawei.com/repo/'}
jcenter()
}
}
? 應用級的build.gradle檔案添加依賴(實際中按照需要設定版本號) 或者在本地“libs”目錄放在Location Kit的har包,
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”,加入排除HMS Core SDK的混淆配置,
運行示例應用效果展示

1. 宣告系統權限 在“config.json”檔案中的“reqPermissions”欄位中添加下列權限
采用HarmonyOS提供了兩種位置權限:ohos.permission.LOCATION (位置權限)和ohos.permission.LOCATION_IN_BACKGROUND(后臺定位權限),注意還需要網路權限,
"reqPermissions": [
{
"reason": "get Local Location",
"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”權限
//以location權限為例
if (verifySelfPermission("ohos.permission.LOCATION") != IBundleManager.PERMISSION_GRANTED) {
printLog(HiLog.INFO, TAG, "Self: LOCATION permission not granted!");
if (canRequestPermission("ohos.permission.LOCATION")) {
printLog(HiLog.INFO, TAG, "Self: can request permission here");
requestPermissionsFromUser(
new String[]{"ohos.permission.LOCATION"}, REQUEST_CODE);
} else {
printLog(HiLog.WARN, TAG, "Self: enter settings to set permission");
}
} else {
printLog(HiLog.INFO, TAG, "Self: LOCATION permission granted!");
}
關鍵代碼說明
1. 創建定位服務客戶端
在基類BaseAbilitySlice中的onStart()方法中創建一個FusedLocationProviderClient實體,通過該實體呼叫定位相關介面,
public FusedLocationProviderClient fusedLocProviderClient;
@Override
protected void onStart(Intent intent) {
super.onStart(intent);
fusedLocProviderClient = new FusedLocationClient(this);
}
2. 檢查設備定位設定
呼叫LocationRequest設定定位請求引數(包括設定位置更新的間隔(毫秒:單位),權重,回傳地址資訊的語言等),并在請求回呼之前呼叫定位服務檢查定位相關設定,
private void checkLocationSettings() {
LocationRequest locationRequest = new LocationRequest();
locationRequest.setPriority(100);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
LocationSettingsRequest request =
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 -> {
// 介面呼叫失敗的處理
});
定義位置更新回呼,
LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult != null) {
// 處理位置回呼結果
}
}
@Override
public void onLocationAvailability(LocationAvailability locationAvailability) {
super.onLocationAvailability(locationAvailability);
if (locationAvailability != null) {
// 處理位置狀態
}
}
};
相關引數說明
1. 設定定位型別,如果請求GNSS位置,則值為100;如請求網路位置,則值為102或104;如不需要主動請求位置,僅需被動接收位置,則值為105,
2. 定位設定的語言,當前僅支持EN和CN,
3. setNumUpdates請求位置的回呼次數,假如值為3時,則只回呼3次結果給客戶端,如果想要一直持續回呼盡量使用默認值,
欲了解更多HMS Core 定位服務詳情,請參閱:
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
解決集成問題請到Stack Overflow:
https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest
了解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導檔案
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間了解 HMS Core 最新技術資訊~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/445561.html
標籤:其他
上一篇:多執行緒筆記
