鸿蒙应用开发学习:获取手机位置信息

一、前言

移动应用中经常需要获取设备的位置信息,因此在鸿蒙应用开发学习中,如何获取手机的位置信息是必修课。之前我想偷懒从别人那里复制黏贴代码,于是在百度上搜了一下,可能是我输入的关键字不对,结果没有找到想要的资料。于是我只能到官网上学习相关的开发文档(位置服务开发指南),自己摸索着做了,经过一番的学习,并在真机上测试,实现了获取手机位置信息的功能。特记之,已备忘。

二、实现方法

1. 首先在module.json5(位于entry/src/main文件夹下)文件中添加应用权限。

"requestPermissions": [{"name": "ohos.permission.APPROXIMATELY_LOCATION"},{"name": "ohos.permission.LOCATION"}]

2、在pages文件夹下通过“新建-page”创建一个ets文件,在文件中设置一个获取位置的按钮和用于显示位置信息的文本组件(具体代码见最后)

3、在这个ets文件导入 @ohos.geoLocationManager

import geoLocationManager from '@ohos.geoLocationManager'

4、实例化LocationRequest对象,用于告知系统该向应用提供何种类型的位置服务,以及位置结果上报的频率。我看了开发文档后,选择了方式二中的代码。

let requestInfo = {'priority': geoLocationManager.LocationRequestPriority.ACCURACY,'timeInterval': 0,'distanceInterval': 0,'maxAccuracy': 0
};

5、创建一个函数,这个函数通过点击界面中获取位置按钮来执行。函数实现以下功能:

(1)实例化Callback对象,用于向系统提供位置上报的途径。

(2)启动定位。

(3)获取系统缓存的最近一次历史定位结果。

(4)结束定位。

注:函数中的几个this开头的变量在主程序中以@state方法修饰,用于在文本控件中显示获取到的位置信息。

getLocation() {let locationChange = (location) => {console.log('locationChanger: data: ' + JSON.stringify(location));};geoLocationManager.on('locationChange', requestInfo, locationChange);try {let location = geoLocationManager.getLastLocation();this.mLatitude = location.latitude.toString();this.mLongitude = location.longitude.toString();this.mAltitude = location.altitude.toString();this.mAccuracy = location.accuracy.toString();this.mSpeed = location.speed.toString();this.mTimeStamp = location.timeStamp.toString();this.mDirection = location.direction.toString();console.log("testTag", "获取到的位置信息:")console.log("testTag", "纬度latitude " + this.mLatitude)console.log("testTag", "经度longitude " + this.mLongitude)console.log("testTag", "海拔(米)altitude " + this.mAltitude)console.log("testTag", "精度(米)accuracy " + this.mAccuracy)console.log("testTag", "速度(米/秒)speed " + this.mSpeed)console.log("testTag", "时间戳timeStamp " + this.mTimeStamp)console.log("testTag", "方向direction " + this.mDirection)} catch (err) {console.error("errCode:" + err.code + ",errMessage:" + err.message);}geoLocationManager.off('locationChange', locationChange);}

6、真机调试,安装了APP后,需要进入手机的“设置-应用和服务-应用管理”,找到安装的APP,手动将位置信息权限打开。(因为我还没有找到,自动开启权限的方式,只能手动开启)。

7、运行APP,进入手机定位页面,点击“获取位置”按钮,界面显示出了获取到的相关信息。

三、源代码

最后上我写的ets文件源代码。

import geoLocationManager from '@ohos.geoLocationManager'let requestInfo = {'priority': geoLocationManager.LocationRequestPriority.ACCURACY,'timeInterval': 0,'distanceInterval': 0,'maxAccuracy': 0
};@Entry
@Component
struct LocationPage {@State mLatitude: string = '' // 经度@State mLongitude: string = '' // 纬度@State mAltitude: string = '' // 海拔(米)@State mAccuracy: string = '' // 精度(米)@State mSpeed: string = '' //速度(米/秒)@State mTimeStamp: string = '' // 时间戳@State mDirection: string = '' // 方向build() {Column() {Button("获取位置").width(100).backgroundColor($r('app.color.button_bgColor_lightBlue')).margin({ top: 50, bottom: 20 }).onClick(() => {this.getLocation()})Text('当前位置').fontSize(24)Grid() {GridItem() {Text('经度:')}GridItem() {Text(this.mLatitude)}GridItem() {Text('纬度:')}GridItem() {Text(this.mLongitude)}GridItem() {Text('海拔:')}GridItem() {Text(this.mAltitude)}GridItem() {Text('精度:')}GridItem() {Text(this.mAccuracy)}GridItem() {Text('速度:')}GridItem() {Text(this.mSpeed)}GridItem() {Text('时间:')}GridItem() {Text(this.mSpeed)}GridItem() {Text('方向:')}GridItem() {Text(this.mDirection)}}.columnsTemplate('1fr 4fr').rowsGap(15).padding(10).width('90%')}.width('100%').backgroundColor('#EAEAEA').padding(10)}// 获取手机当前位置getLocation() {let locationChange = (location) => {console.log('locationChanger: data: ' + JSON.stringify(location));};geoLocationManager.on('locationChange', requestInfo, locationChange);try {let location = geoLocationManager.getLastLocation();this.mLatitude = location.latitude.toString();this.mLongitude = location.longitude.toString();this.mAltitude = location.altitude.toString();this.mAccuracy = location.accuracy.toString();this.mSpeed = location.speed.toString();this.mTimeStamp = location.timeStamp.toString();this.mDirection = location.direction.toString();console.log("testTag", "获取到的位置信息:")console.log("testTag", "纬度latitude " + this.mLatitude)console.log("testTag", "经度longitude " + this.mLongitude)console.log("testTag", "海拔(米)altitude " + this.mAltitude)console.log("testTag", "精度(米)accuracy " + this.mAccuracy)console.log("testTag", "速度(米/秒)speed " + this.mSpeed)console.log("testTag", "时间戳timeStamp " + this.mTimeStamp)console.log("testTag", "方向direction " + this.mDirection)} catch (err) {console.error("errCode:" + err.code + ",errMessage:" + err.message);}geoLocationManager.off('locationChange', locationChange);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/244094.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bluetooth Device Address(BD_ADDR) - 2

蓝牙核心规范:Core v5.3中关于蓝牙地址的其他说明 Vol 3: Host, Part C: Generic Access Profile 3 User interface aspects 3.2 Representation of Bluetooth parameters 3.2.1 Bluetooth Device Address (BD_ADDR) BD_ADDR 是蓝牙设备使用的地址。在设备发现过…

Docker容器操作 Docker创建并运行Nginx、Redis

容器操作的命令如图: 容器命令 # 创建并运行一个容器,运行成功后会返回容器id docker run# 暂停,将容器挂起,内存暂存,CPU不再执行 docker pause # 恢复运行,内存恢复,CPU恢复 docker unpause#…

设计模式篇章(4)——十一种行为型模式

这个设计模式主要思考的是如何分配对象的职责和将对象之间相互协作完成单个对象无法完成的任务,这个与结构型模式有点像,结构型可以理解为静态的组合,例如将不同的组件拼起来成为一个更大的组件;而行为型更是一种动态或者具有某个…

微信小程序实现长按 识别图片二维码

第一种方案&#xff08;只需要在image里面加一个属性就可以了&#xff09; show-menu-by-longpress“{{true}}” <image show-menu-by-longpress"{{true}}" src"{{sysset.dyqewm}}" />第二种方案 放大预览图片&#xff0c;长按识别二维码 wxml <…

ImportError: The Qt version imported is 5.9.7 but Matplotlib requires Qt>=5.12

一、错误描述 ImportError: The Qt version imported is 5.9.7 but Matplotlib requires Qt>5.12 在用python中的plt包进行绘图时对plt进行了更新&#xff0c;更新之后再运行以前的代码就出现了这个问题。 二、bug消除 &#xff08;一&#xff09;解决方法——升级pyqt包…

【4k】4k的webrtc播放示例

目录 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数

关于在微信小程序中使用taro + react-hook后销毁函数无法执行的问题

问题&#xff1a; 在 taro中使用navigageTo() 跳转路由后hook中useEffect 的return函数没有执行 没有执行return函数 框架版本&#xff1a; tarojs: 3.6 react: 18.0 原因&#xff1a; 使用navigateTo() 跳转路由的话并不会销毁页面和组件&#xff0c;会加入一…

2023年第十四届蓝桥杯软件赛省赛总评

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

Portainer Docker容器可视化管理平台实践

Portainer Docker容器可视化管理平台实践 引安装登录Remote ENV 实践 引 平常用docker命令操作比较多&#xff0c;找了一款docker可视化工具&#xff0c;方便快速预览和批量操作&#xff0c;不想一行一行敲的时候&#xff0c;可以偷偷懒。Portainer试用了一下&#xff0c;安装…

二分法——C++

二分分为整数二分和浮点数二分&#xff0c;其中比较复杂的是整数二分&#xff0c;简单一点的是浮点数二分。 我们首先来说明整数二分,主要来讲解模板。 整数二分&#xff1a; 我们先来说一说使用二分法的前提&#xff0c;要有单调性&#xff0c;然后可以根据某种性质来划分成…

C#winform上位机开发学习笔记5-串口助手的定时发送功能添加

1.功能描述 选择自动发送功能后&#xff0c;按照设定的发送时间发送发送框中的信息数据&#xff0c;设定时间可以手动输入&#xff0c;当手动输入信息无效&#xff08;非数字&#xff09;时&#xff0c;系统弹出错误提示&#xff0c;并将其设置为默认定时时间。 2.代码部分 步…

不同知识表示方法与知识图谱

目录 前言1 一阶谓词逻辑1.1 简介1.2 优势1.3 局限性 2 产生式规则2.1 简介2.2 优势2.3 局限性 3 框架系统3.1 简介3.2 优势3.3 局限性 4 描述逻辑4.1 简介4.2 优势4.3 局限性 5 语义网络5.1 简介5.2 优势5.3 局限性 结语 前言 知识表示是人工智能领域中至关重要的一环&#x…

基于SpringBoot Vue博物馆管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

TCP和SSL/TLS 协议通信原理

&#x1f47d;System.out.println(“&#x1f44b;&#x1f3fc;嗨&#xff0c;大家好&#xff0c;我是代码不会敲的小符&#xff0c;双非大四&#xff0c;Java实习中…”); &#x1f4da;System.out.println(“&#x1f388;如果文章中有错误的地方&#xff0c;恳请大家指正&a…

windows 11安装VMware 17 ,VMware安装Ubuntu 20.4

一、下载安装激活VMware 17 下载与激活&#xff1a;Vmware 17 下载地址、最新激活码 2024 _ 注意&#xff1a;安装路径自己选择&#xff0c;路径中尽可能避免中文或空格 二、下载Ubuntu 镜像 下载镜像地址&#xff1a;清华大学开源软件镜像站 点开下载镜像地址&#xff0c;找…

Shell 脚本实现自动启动程序、日志管理和定时任务监控

简介 本篇将通过Shell 脚本实现自动启动Java程序、日志管理和定时任务监控。脚本启动程序具灵活定制、可移植性和扩展性强的优点&#xff0c;可以根据需要添加额外的功能、配置选项和自定义行为&#xff0c;从而满足更具体的要求。 脚本编写 vim start_program.sh#!/bin/bas…

PgSQL - 17新特性 - 块级别增量备份

PgSQL - 17新特性 - 块级别增量备份 PgSQL可通过pg_basebackup进行全量备份。在构建复制关系时&#xff0c;创建备机时需要通过pg_basebackup全量拉取一个备份&#xff0c;形成一个mirror。但很多场景下&#xff0c;我们往往不需要进行全量备份/恢复&#xff0c;数据量特别大的…

【操作系统】内存管理

文章目录 1. 为什么需要引入虚拟内存2. 如何实现虚拟地址到物理地址的映射2.1 内存分段2.1.1 分段机制2.1.2 内存分段的不足之处 2.2 内存分页2.2.1 分页机制2.2.2 单级页表2.2.3 多级页表 2.2.2 如何解决了外部碎片和内存交换效率低的问题 2.3 段页式 1. 为什么需要引入虚拟内…

【Linux取经路】初探进程地址空间

文章目录 一、历史问题回顾二、语言层面的地址空间2.1 验证 三、虚拟地址的引入3.1 初步解释这种现象——引入地址空间的概念3.2 再来粗粒度理解上面的现象 四、细节解释4.1 地址空间究竟是什么&#xff1f;4.2为什么要有地址空间4.3 页表4.3.1 CR3寄存器4.3.2 页表是由页表项组…

luffy商城项目(二)

路飞后端配置 二次封装response drf提供的Response对象&#xff0c;不能很方便的加入code和msg字段&#xff0c;自己封装一个Response类&#xff0c;以后都用我们自己封装的&#xff0c;方便咱们写code和msg 封装步骤&#xff1a; 1 在utils/common_response.py from rest_…