鴻蒙手表定位功能Demo體驗,適用兒童、老年和外出旅游安全市場


針對兒童和老人,可穿戴的智能手表用處很大。市場也有許多類似的產品,支持接打電話、支付掃碼、定位等功能,屬於新興的商業機會。依托華為品牌,鴻蒙手表也致力為用戶打造精品的、產品質量佳、可穿戴的智能體驗。對此,HMS Core 定位服務(Location Kit)可以提供三個主要能力,包括融合定位、活動識別和地理圍欄。接下來,小編邀請開發者們通過簡單快速的幾步,體驗定位服務在鴻蒙手表上開發的定位功能。

一、 定位服務的優勢和限制

  1. 定位低功耗:利用芯片實現地理圍欄,功耗更低。

  2. 定位高精度:優化城市峽谷下道路兩側的定位准確率,准確率高。基於RTK(Real - time kinematic)技術,實現開闊地亞米級高精定位能力。

  3. 最新版本SDK需要用戶手機上安裝HMS Core(APK)6.0.0以上版本。若未安裝,或安裝了其他版本的HMS Core(APK),功能可以正常使用,但不支持版本自動升級。

  4. HarmonyOS通過數字證書和Profile文件來對應用進行管控,只有簽名過的HarmonyOS Ability Package(以下簡稱“HAP”)才被允許安裝到設備上運行。

二、 Demo介紹

為了讓開發者更好的了解鴻蒙手表定位功能的實現,這里提供了一個簡單的集成案例,邀請大家用簡單的代碼運行Demo。代碼能力包括請求回調定位功能,獲取緩存定位信息,查詢定位信息是否可用及檢查設置權限等

三、 開發實戰

下面為開發者們介紹如何根據源代碼將這個Demo運行起來,以便於了解實現細節。

開發准備

1. 工具准備

測試設備 HarmonyOS 2.0及以上的華為智能手表

開發工具 DevEco Studio 2.1.0.201及以上

2. 開發前准備

  1. 注冊成為華為開發者,創建一個應用

參考定位服務開發准備在華為應用市場創建一個您的應用。

  1. 生成數字證書和Profile文件

詳細步驟包括申請應用調試證書注冊調試設備申請調試Profile ,配置簽名信息。

  1. 生成簽名證書指紋 ,配置簽名證書指紋。

  2. 集成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"
  }
  1. 在代碼中動態申請“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

了解更多詳情>>

訪問華為開發者聯盟官網
獲取開發指導文檔
華為移動服務開源倉庫地址:GitHubGitee

關注我們,第一時間了解 HMS Core 最新技術資訊~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM