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

一、前言

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

二、实现方法

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.mzph.cn/news/643818.shtml

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

相关文章

第十三讲_ArkUI栅格布局(GridRow/GrowCol)

ArkUI栅格布局(GridRow/GrowCol) 1. 栅格布局概述2. GridRow的使用2.1 设置栅格布局的总列数2.2 设置栅格布局的排列方向2.3 设置栅格布局中子组件间距 3. GridCol的使用3.1 设置一个GridCol占栅格布局的列数3.2 设置GridCol在栅格布局中偏移列数3.3 设置…

【学网攻】 第(6)节 -- 三层交换机实现VLAN间路由

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan【学网攻】 第(5)节 -- Cisco VTP的使用 前言 第5章给大家讲了VTP,也是为这节课铺垫,带领大家慢慢进入路由的区…

手势识别MATLAB代码

手势识别是智能设备常用的需求, 下面我们用MATLAB来识别手部的形态: 主程序main.m clc;clear all;close all;%清除命令行和窗口 imimread(DSC05815.JPG); [skin,bwycbcr,w,h] hand_segmentation(im); im1bwycbcr; % se strel(ball,[1 1 1;1 1 1;1 1 1]); im1 imdilate(im…

《Linux C编程实战》笔记:信号的发送

信号的发送主要由函数kill、raise、sigqueue、alarm、setitimer以及abort来完成 kill函数 kill函数用来发送信号给指定的进程。 #include<sys/types.h> #include<signal.h> int kill(pid_t pid,int sig); 该函数的行为与第一个参数pid有关&#xff0c;第二个参…

鸿蒙开发-UI-布局-网格

鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 鸿蒙开发-UI-布局-弹性布局 鸿蒙开发-UI-布局-相对布局 鸿蒙开发-UI-布局-格栅布局 鸿蒙开发-UI-布局-列表 文章目录 前言 一、基本概念 二、开发布局 1.排列方式 2.设置行列间距 三、应用特性 1.网格数…

android usb2.0 协议基础(2)

2.4 USB逻辑部件 USB 逻辑部件 设备---》 接口 &#xff08;一个或多个&#xff09;&#xff1a;用于描述特定功能&#xff0c;包含多个端点----》端点&#xff08;一个或多个&#xff09;&#xff1a; 传输的最终对象端点号&#xff0c;传输类型传输方向&#xff0c;最大的数据…

设备通过GB28181注册到EasyCVR,平台看不到设备信息的排查方法汇总

智慧安防平台EasyCVR能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;平台支持设备通过4G、5G、WIFI、有线等方式进行视频流的接入与传输&#xff0c;支持的接入协议包括&#xff1…

大数据开发之Spark(RDD弹性分布式数据集)

第 1 章&#xff1a;rdd概述 1.1 什么是rdd rdd&#xff08;resilient distributed dataset&#xff09;叫做弹性分布式数据集&#xff0c;是spark中最基本的数据抽象。 代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 1.1…

Zabbix 微信与钉钉告警配置部署

Zabbix 微信与钉钉告警配置部署 系统环境准备好&#xff1a; Lnmp zabbix-server&#xff1a;172.20.26.167 Mysql主从zabbix-agent&#xff1a;172.20.26.198、172.20.26.24 zabbix的安装部署可以查阅之前的文章&#xff1a;Zabbix 4.0安装部署自动发现及自动注册、自动添…

huggingface学习|云服务器部署Grounded-Segment-Anything:bug总会一个一个一个一个又一个的解决的

文章目录 一、环境部署&#xff08;一&#xff09;模型下载&#xff08;二&#xff09;环境配置&#xff08;三&#xff09;库的安装 二、运行&#xff08;一&#xff09; 运行grounding_dino_demo.py文件&#xff08;二&#xff09;运行grounded_sam_demo.py文件&#xff08;三…

2023年第十六届中国系统架构师大会(SACC2023):核心内容与学习收获(附大会核心PPT下载)

大会以“数字转型 架构演进”为主题&#xff0c;聚焦系统架构在数字化转型中的演进和应用。 与往届相比&#xff0c;本届大会最大的变化是从原来的大会演讲模式变革为专题研讨会模式。专题研讨会主题内容紧扣行业落地实践痛点与难点&#xff0c;多角度聚焦行业的架构演进之路。…

Python requests网络库源码分析(第三篇:通过学习异常模块,了解http协议)

前言 作者在requests包下&#xff0c;定义了exceptions模块&#xff0c;该模块中定义执行http请求过程中常见的错误&#xff0c;熟悉这些错误有助于我们写出健壮的业务程序&#xff0c;同时还能温习http的知识点&#xff0c;本文基于的requests版本为2.27.1 exceptions模块&…

关于网络安全 的 ARP欺骗 实验操作

实验设备&#xff1a; Windows server 2008 kali 1. vmware--上面菜单栏--虚拟机--设置--网络--NAT 模式 确定靶机与攻击机的连通性&#xff08;互相能 ping 通&#xff09; 靶机查看 arp 表&#xff08;arp -a&#xff09; 查看攻击机(kali)物理地址&#xff08;ip addr&…

SpringBoot整合ElasticSearch实现基础的CRUD操作

本文来说下SpringBoot整合ES实现CRUD操作 文章目录 概述spring-boot-starter-data-elasticsearch项目搭建ES简单的crud操作保存数据修改数据查看数据删除数据 本文小结 概述 SpringBoot支持两种技术和es交互。一种的jest&#xff0c;还有一种就是SpringData-ElasticSearch。根据…

Modern C++ 一个例子学习条件变量

目录 问题程序 施魔法让BUG浮出水面 条件变量注意事项 修改程序 问题程序 今天无意中看到一篇帖子&#xff0c;关于条件变量的&#xff0c;不过仔细看看发现它并达不到原本的目的。 程序如下&#xff0c;读者可以先想想他的本意&#xff0c;以及有没有问题&#xff1a; #…

Zabbix分布式监控系统

实验过程 ps&#xff1a; 阿里云盘Xnode1获取 xnode1 https://www.alipan.com/s/HgLXfoeBWG2 提取码: eb70 1、xnode1克隆两台虚拟机并修改ip zabbix-server192.168.224.3 zabbix-agent192.168.224.4 2、修改主机名 [rootlocalhost ~]# hostnamectl set-hostname zabbix-se…

Vue开始封装全局防抖和节流函数

封装文件 封装文件的实现思路如下&#xff1a; 首先&#xff0c;我们需要定义两个函数&#xff1a;防抖函数和节流函数。这两个函数的目的是为了减少频繁触发某个事件导致的性能问题&#xff1b;防抖函数的实现思路是创建一个计时器变量&#xff0c;用于延迟执行函数。当触发…

Spring Boot 初始(快速搭建 Spring Boot 应用环境)

提示&#xff1a; ① 通过下面的简介可以快速的搭建一个可以运行的 Spring Boot 应用&#xff08;估计也就2分钟吧&#xff09;&#xff0c;可以简单的了解运行的过程。 ② 建议还是有一点 Spring 和 SpringMVC的基础&#xff08;其实搭建一个 Spring Boot 环境不需要也没有关系…

uniapp中打包Andiord app,在真机调试时地图以及定位功能可以正常使用,打包成app后失效问题(高德地图)

踩坑uniapp中打包Andiord app&#xff0c;在真机调试时地图以及定位功能可以正常使用&#xff0c;打包成app后失效问题_uniapp真机调试高德地图正常 打包apk高德地图就不加载-CSDN博客 问题&#xff1a; 目前两个项目&#xff0c;一个项目是从另一个项目里面分割出来的一整套…

AI 赋能绿色制冷,香港岭南大学开发 DEMMFL 模型进行建筑冷负荷预测

近年来&#xff0c;城市化进程加速所带来的碳排放量骤增&#xff0c;已经严重威胁到了全球环境。多个国家均已给出了「碳达峰&#xff0c;碳中和」的明确时间点&#xff0c;一场覆盖全球、全行业的「绿色革命」已经拉开序幕。在一众行业中&#xff0c;建筑是当之无愧的能耗大户…