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.…

自动驾驶系统研发—从工程视角看纯视觉自动驾驶的安全挑战与应对策略

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中一起航行,共同成长,探索技术的无限可能。 🚀 探索专栏:学…