HarmonyOS Next深度解析:高德定位SDK高效集成與實戰指南

HarmoyOS Next 實現高德定位SDK

注:作者采用版本為 HarmonyOS 5.0.0 Release SDK和DevEco Studio 5.0.0 Release。

1.獲取本地AppID:

  • 在index.pages的abountToAppear( ) 方法中獲取appID、并打印在Log日志,即可在程序運行時獲取本地項目的AppID。
    在這里插入圖片描述

2. 申請高德定位SDK的key:

  • 高德地圖API
  • 輸入本地的AppID即可申請獲取到高德定位SDK的Key
  • 在這里插入圖片描述

3. 配置權限聲明:在項目的module.json5配置相關權限,以及配置相關權限reason。

  • 其中 reason 可以在string.json中自行命名。
"requestPermissions": [{"name": "ohos.permission.APPROXIMATELY_LOCATION","reason": "$string:Harmony_location_permission_reason","usedScene": {"abilities": ["Harmony_location_demoAbility"],"when": "always"}},{"name": "ohos.permission.LOCATION","reason": "$string:Harmony_location_permission_reason","usedScene": {"abilities": ["Harmony_location_demoAbility"],"when": "always"}},{"name": "ohos.permission.LOCATION_IN_BACKGROUND","reason": "$string:Harmony_location_permission_reason","usedScene": {"abilities": ["Harmony_location_demoAbility"],"when": "always"}},{"name": "ohos.permission.INTERNET","reason": "$string:Harmony_location_permission_reason","usedScene": {"abilities": ["Harmony_location_demoAbility"],"when": "always"}},{"name": "ohos.permission.KEEP_BACKGROUND_RUNNING","reason": "$string:Harmony_location_permission_reason","usedScene": {"abilities": ["Harmony_location_demoAbility"],"when": "always"}}]

4. oh-package.json5 中獲取相關定位包:

"dependencies": {"@amap/amap_lbs_common": ">=1.2.0","@amap/amap_lbs_location": ">=1.2.0"}

5. 初始化隱私政策,創建AMapLocationManagerImpl,以及動態生成權限。

  • 導入所需模塊
import { AMapLocation, AMapLocationManagerImpl } from '@amap/amap_lbs_location';
import { AMapPrivacyAgreeStatus, AMapPrivacyInfoStatus, AMapPrivacyShowStatus } from '@amap/amap_lbs_common';
import { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
import abilityAccessCtrl, { PermissionRequestResult } from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';
import { AMapLocationOption, AMapLocationReGeocodeLanguage, AMapLocationType, IAMapLocationListener } from '@amap/amap_lbs_location';
import geoLocationManager from '@ohos.geoLocationManager';
import { promptAction } from '@kit.ArkUI';
  • 初始化隱私政策,創建AMapLocationManagerImpl及動態申請權限
locationManger?: AMapLocationManagerImpl;private context = getContext(this);onPageShow() {//設置KeyAMapLocationManagerImpl.setApiKey("**高德定位SDK的key**");//初始化隱私政策AMapLocationManagerImpl.updatePrivacyShow(AMapPrivacyShowStatus.DidShow, AMapPrivacyInfoStatus.DidContain, getContext(this))AMapLocationManagerImpl.updatePrivacyAgree(AMapPrivacyAgreeStatus.DidAgree, getContext(this))//創建AMapLocationManagerImplthis.locationManger = new AMapLocationManagerImpl(this.context);// 檢查系統定位是否開啟checkLocationEnabled();//獲取權限this.reqPermissionsFromUser(['ohos.permission.APPROXIMATELY_LOCATION','ohos.permission.LOCATION',]);}// 請求權限reqPermissionsFromUser(permissions: Array<Permissions>): void {let context: Context = getContext(this) as common.UIAbilityContext;let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();// requestPermissionsFromUser會判斷權限的授權狀態來決定是否喚起彈窗atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => {let grantStatus: Array<number> = data.authResults;let length: number = grantStatus.length;for (let i = 0; i < length; i++) {if (grantStatus[i] === 0) {// 用戶授權,可以繼續訪問目標操作this.message = '權限已授權';} else {// 用戶拒絕授權,提示用戶必須授權才能訪問當前頁面的功能,并引導用戶到系統設置中打開相應的權限this.message = '需要定位權限,請前往設置開啟';// 彈出 Toast 提示promptAction.showToast({message: '需要定位權限,請前往設置開啟',duration: 3000});return;}}// 授權成功}).catch((err: BusinessError) => {console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);})}
  • 在struct 界面結構體外配置異步方法,用于檢查定位是否啟用。
// 檢查定位是否啟用
async function checkLocationEnabled() {try {let isEnabled = await geoLocationManager.isLocationEnabled();console.info("Location is enabled: " + isEnabled);} catch (error) {console.error("Failed to check location status: " + JSON.stringify(error));}
}

6. 開啟單次定位參數配置(也可自行配置為連續定位)

// 定位配置項options: AMapLocationOption = {priority: geoLocationManager.LocationRequestPriority.FIRST_FIX, //定位優先配置選項scenario: geoLocationManager.LocationRequestScenario.UNSET, //定位場景設置timeInterval: 2, //定位時間間隔distanceInterval: 0, //位置報告距離間隔maxAccuracy: 20, //定位精度 單位:米allowsBackgroundLocationUpdates: false, //是否允許后臺定位locatingWithReGeocode: true, //定位是否返回逆地理信息reGeocodeLanguage: AMapLocationReGeocodeLanguage.Chinese, //逆地址語言類型isOffset: true //是否加偏}
  • 補充目前高德定位SDK的逆地理信息未適配HarmonyOS Next,可采用高德Web服務,進行經緯度逆向轉換為具體的地理信息。
  • 定位信息監聽配置及經緯度信息解析:
// 定位監聽器listener: IAMapLocationListener = {onLocationChanged: (location) => {this.response = "\n"+ " 經度:" + location.longitude + "\n"+ " 緯度:" + location.latitude + "\n"+ " 海拔:" + location.altitude + "\n"+ " 精度:" + location.accuracy + "\n"+ " 速度:" + location.speed + "\n"+ " UTC時間:" + location.timeStamp + "\n"+ " 方向:" + location.direction + "\n"+ " 自啟動以來時間:" + location.timeSinceBoot + "\n"+ " 附加信息:" + location.additions + "\n"+ " 附加信息size:" + location.additionSize + "\n"+ " 逆地理:" + location.reGeo?.country}, onLocationError: (error) => {this.response = JSON.stringify(error);// todo something}};

7. 定位功能調用及關閉

    @State response: string = '';---Row(){Button('開始定位').fontSize(20).margin(20).onClick(() => {this.locationManger?.setLocationListener(AMapLocationType.Updating, this.listener) //設置定位信息監聽this.locationManger?.setLocationOption(AMapLocationType.Updating, this.options) //設置定位配置項this.locationManger?.startUpdatingLocation() //開啟連續定位// this.locationManger?.stopUpdatingLocation() //關閉連續定位})Button('停止定位').fontSize(20).margin(20).onClick(() => {this.locationManger?.stopUpdatingLocation() //關閉連續定位})}Text("具體地址信息:" + this.response).fontSize(20)

8.具體效果如圖:
在這里插入圖片描述
9. 使用時不要忘記右鍵下拉,開啟手機的定位服務。
10.錯誤碼說明:在這里插入圖片描述

  • 總結:
    以上為如何在HarmonyOS Next 5.0 使用高德定位SDK的模塊;
    如有任何問題,請大家指出,本人再進行完善

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87310.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【技術】記一次 Docker 中的 ES 數據遷移,使用 Reindex API

記一次 Docker 中的 ES 數據遷移&#xff0c;使用 Reindex API 環境背景需求背景開始遷移確認老 ES 的訪問地址在新 ES 中創建索引的 Mapping (選配)在新 ES 中配置老 ES 的地址開始遷移數據數據驗證 首先聲明&#xff0c;是因為環境限制&#xff0c;沒有辦法使用同步工具&…

yii2基礎版本安裝記錄,實錄有點亂看標題即可

因為使用php 安裝的是docker環境所有進入到容器安裝ridh_mfe_api 為掛載目錄 Nginx及PHP掛載配置 因為使用php 安裝的是docker環境所有進入到容器安裝 ridh_mfe_api 為掛載目錄 進入容器 % docker exec -it php sh /var/www/html # ls index.html index.php composer crea…

前端跨域解決方案(3):CORS

1 CORS 核心 CORS&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff0c;即跨域資源共享&#xff0c;是目前最主流的跨域方案&#xff0c;它通過服務器返回的特殊 HTTP 頭&#xff0c;允許瀏覽器放行跨域請求。與傳統的 JSONP 相比&#xff0c;CORS 具有明顯的優…

SpringBoot源碼解析(十五):spring-boot-autoconfigure.jar的模塊化設計

前言 SpringBoot的自動配置是其革命性特性的核心&#xff0c;而spring-boot-autoconfigure.jar則是這一機制的物理載體。本文將深入剖析這個JAR包的模塊化設計哲學&#xff0c;從包結構劃分、條件注解體系到自動配置加載機制&#xff0c;全方位解析SpringBoot如何通過精妙的模…

學習筆記九:docker容器日志問題

docker容器日志問題 背景如何處理日志問題主要通過日志輪詢方式處理。修改 Docker 配置日志快速清理 背景 Docker 默認使用的是 json-file 日志驅動。日志會一直寫&#xff0c;一直寫&#xff0c;沒有限制、沒有輪轉、沒有清理&#xff01; 日志默認位置&#xff1a; /var/lib…

低成本同屏方案:電腦 + 路由器實現 50 臺安卓平板實時同屏

引言 在教育機構、小型培訓場景或企業簡易會議中&#xff0c;常面臨以最低成本實現多設備同屏的需求。本文針對 "電腦 路由器 50 臺安卓平板" 的極簡硬件組合&#xff0c;詳細剖析實時同屏的實現路徑&#xff0c;從問題分析到技術落地提供全流程解決方案&#xff0…

Unity ECS DOTS技術實現50000個cube隨機循環移動流程

前言 之前使用過ECS面向組件開發&#xff0c;一直想試一下Unity的ECS DOTS技術&#xff0c;但是苦于入門門檻太高&#xff0c;下載官方的Demo&#xff0c;發現代碼哪哪兒都看不懂&#xff0c;一大堆API聞所未聞&#xff0c;而且沒有一個入門的流程&#xff0c;導致無法進行下去…

設計模式精講 Day 3:抽象工廠模式(Abstract Factory Pattern)

【設計模式精講 Day 3】抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09; 文章簡述 在軟件開發中&#xff0c;隨著業務復雜度的提升&#xff0c;系統需要支持多種產品族的創建。抽象工廠模式正是為了解決這一問題而誕生的設計模式之一。本文作為“設計模式精講”…

Kafka消息零丟失架構設計:從原理到實戰的全方位保障

引言 在構建高可靠分布式系統時&#xff0c;Kafka作為核心消息中間件被廣泛應用于數據管道、實時流處理等關鍵場景。然而&#xff0c;分布式環境下的網絡波動、節點故障等因素可能導致消息丟失&#xff0c;如何確保Kafka實現端到端的消息零丟失成為架構設計的關鍵挑戰。本文將…

Python學習筆記:錯誤和異常處理

1. 什么是錯誤和異常 在Python中&#xff0c;錯誤可以分為兩類&#xff1a; 語法錯誤(Syntax Errors)&#xff1a;代碼不符合Python語法規則異常(Exceptions)&#xff1a;語法正確的代碼在運行時發生的錯誤 # 語法錯誤示例 print("Hello World" # 缺少右括號# 異…

為什么要進行行為驗證,行為驗證方式有哪些?

進行行為驗證的主要目的是提高賬戶安全性、防范自動化攻擊、增強用戶身份確認精準度、優化用戶體驗。其中&#xff0c;提高賬戶安全性最為關鍵。行為驗證能通過分析用戶的行為模式&#xff0c;如操作習慣、設備使用特點等&#xff0c;識別出非正常或惡意活動&#xff0c;迅速采…

主流Java Redis客戶端(Jedis、Lettuce、Redisson)差異對比

主流Java客戶端對比&#xff1a;Jedis采用阻塞I/O&#xff0c;需連接池支持&#xff1b;Lettuce/Redisson基于Netty非阻塞I/O。Jedis輕量但并發能力弱&#xff0c;Lettuce支持10K并發且為SpringBoot默認&#xff0c;Redisson提供分布式功能但性能稍遜。 Redisson Lettuce 在 …

使用Hexo搭建博客網站(二)

設置主題 我們在官方主題中選擇一個自己喜歡的主題 來到GitHub&#xff0c;將它git clone到當前項目的themes文件夾中 設置_config.yml 找到 # Extensions ## Plugins: https://hexo.io/plugins/ ## Themes: https://hexo.io/themes/ theme: landscape 只需將這個landscape名字…

springAI 大模型應用開發

一 筆記總結 1.1 spring AI 實戰 1.1.1 spring aideepseek整合 通過使用spring ai 調用大模型deepseek&#xff0c;實現對話聊天&#xff0c;文字轉圖片&#xff0c;文字轉音頻。 1.1.2 OLLAMA Ollama 專為本地部署和運行大型語言模型&#xff08;LLM&#xff09;而設計的…

Java + Spring Boot 后端防抖應用實例

防抖工具&#xff08;適用單機部署&#xff09; DebounceUtil.java package com.weiyu.utils;import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import org.springframework.stereotype.Component;import java.util.Map; import java.util.c…

PostgreSQL 快速入門

PostgreSQL介紹 PostgreSQL 是一個功能強大的開源關系型數據庫系統&#xff0c;它使用并擴展了 SQL 語言&#xff0c;并結合了許多功能&#xff0c;可以安全地存儲和擴展復雜的數據工作 PostgreSQL 因其經過驗證的架構、可靠性、數據完整性、強大的功能集、可擴展性以及軟件背…

CppCon 2016 學習:Out of memory? Business as usual.

當程序因為內存耗盡而拋出 std::bad_alloc 異常時&#xff0c;這并不意味著程序必須崩潰或停止運行。我們應該考慮“內存不足”作為一種可能正常出現的情況&#xff08;“Out of memory? Business as usual.”&#xff09;&#xff0c;并設計應用程序能優雅地處理這種異常。 具…

廟算兵棋推演AI開發初探(8-神經網絡模型接智能體進行游戲)

前言の碎碎念 由于我做的模仿學習&#xff0c;可能由于沒有完全模仿&#xff0c;可以說效果很爛……后來用強化學習優化&#xff0c;這個倒是不用自己做數據集了&#xff0c;為方便大家只搞代碼&#xff0c;這里只說這部分的經歷和方法。 實踐基礎介紹 1-動作 先介紹一個強化…

Uart_Prj02 Windows 窗口版串口_Step1

完成上位機控制臺串口后&#xff0c;接下來想用C#做一個Windows 窗口版的串口。上位機編程不是很熟練&#xff0c;每天學一點做一點。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.…

自動駕駛系統研發—從工程視角看純視覺自動駕駛的安全挑戰與應對策略

???? 歡迎來到我的技術小筑,一個專為技術探索者打造的交流空間。在這里,我們不僅分享代碼的智慧,還探討技術的深度與廣度。無論您是資深開發者還是技術新手,這里都有一片屬于您的天空。讓我們在知識的海洋中一起航行,共同成長,探索技術的無限可能。 ?? 探索專欄:學…