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

一、前言

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

二、实现方法

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);
  }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】初识Docker,安装以及了解操作命令

一、为什么要使用容器? 背景:以前开发、测试、生产为不同的环境,痛点是发现开发测试以后没问题,但是在生产环境无法运行。给测试、开发、运维人员造成了大量的工作。最终结果是发版更新速度也跟不上,效率低 我认为使…

java SSM自助快递服务平台myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM自助快递服务平台是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…

mysql 导入数据 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘

前言: mysql 导入数据 遇到这个错误 1273 - Unknown collation: utf8mb4_0900_ai_ci 具体原因没有深究 但应该是设计数据库的 字符集类型会出现这个问题 例如: char varchar text..... utf8mb4 类型可以存储表情 在现在这个时代会用很多 以后会用的更多 所以不建议改…

【BBuf的CUDA笔记】十三,OpenAI Triton 入门笔记一

0x0. 前言 2023年很多mlsys工作都是基于Triton来完成或者提供了Triton实现版本,比如现在令人熟知的FlashAttention,大模型推理框架lightllm,diffusion第三方加速库stable-fast等灯,以及很多mlsys的paper也开始使用Triton来实现比…

【C++】string的基本使用二

我们接着上一篇的迭代器说起,迭代器不只有正向的,还有反向的,就是我们下边的这两个 它的迭代器类型也是不同的 rbegin就是末尾,rend就是开头,这样我们想遍历一个string对象的话就可以这样做 int main() {string s1(…

flask+ansible 打造自己的自动化运维平台

一、前言 随着企业信息化要求越来越高,云化架构带来挑战和冲击,海量设备的运维压力也是越来越大,虽然有了批量操作工具,但自动化运维工具操作主要还是依赖于手工执行(脚本小子),手工执行又存在着…

云计算管理-linux

1.权限 基本权限与归属 访问权限 读取:允许查看内容-read r 写入:允许修改内容-write w 可执行:允许运行和切换-excute x 对于文本文件: r读取权限:cat、less、grep、head、tail w写入权…

推荐在线PS修图网页版工具PHP网站源码

在线PS修图网页版工具PHP网站源码,PHP在线照片图片处理PS网站程序源码photoshop网页版。 有很多朋友们都是在用PS作图的,众所周知在使用和学习PS时是需要下载软件的,Photoshop软件对电脑配置也是有一定要求的,今天就为大家带来一…

消息队列RabbitMQ.01.安装部署与基本使用

目录 RabbitMQ的作用 Message queue 释义 问题思考 存在的问题 优化方案 案例分析 带来的好处 消息队列特点 Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ 3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查…

TCP和SSL/TLS 协议通信原理

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,双非大四,Java实习中…”); 📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正&a…

Python | 七、栈 Stack、队列 Queue

栈的基础知识 是一种数据结构,在Python中常使用列表来模拟实现特点:先进后出 栈的基本操作 因为Python中通过列表模拟实现栈,所以以下的基本操作实际是列表的一些操作获取长度,使用len(stack)方法进栈,使用stack.app…

自然语言处理的崛起:从初步分析到深度理解

自然语言处理(NLP)是计算机科学、人工智能和语言学的交叉领域,旨在让计算机能够理解和生成人类语言。随着时间的推移,NLP 经历了一系列革命性的变化,从简单的规则和模式匹配到如今的深度学习模型,它们使计算…

API调试?试试Apipost

你是否经常遇到接口开发过程中的各种问题?或许你曾为接口测试与调试的繁琐流程而烦恼。不要担心!今天我将向大家介绍一款功能强大、易于上手的接口测试工具——Apipost,并带你深入了解如何玩转它,轻松实现接口测试与调试。 什么是…

Mysql索引的初步认识

索引基本概念 1、什么是MySQL 索引 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数…

怎么把一个已经压缩好的大容量的压缩包,分卷后发给别人

环境: Win10 专业版 7Z 360压缩 问题描述: 怎么把一个已经压缩好的大压缩包,分卷 解决方案: 使用压缩软件:许多常用的压缩软件,如WinRAR、7-Zip等,都支持将大的压缩包分卷压缩。您可以使…

Android状态栏布局隐藏的方法

1.问题如下,安卓布局很不协调 2.先将ActionBar设置为NoActionBar 先打开styles.xml 3.使用工具类 package com.afison.newfault.utils;import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graph…

聚道云软件连接器实现航信与用友NC凭证对接,助力企业实现数字化转型

客户介绍: 某自然资源产业集团有限公司是一家专注于自然资源产业的领军企业。自成立以来,该企业始终致力于矿产资源、土地整理和生态修复等领域的业务发展。该企业凭借其卓越的业绩和良好的社会声誉,赢得了广泛的认可与赞誉。 客户痛点&…

8-Python 工匠:使用装饰器的技巧

Python 工匠:使用装饰器的技巧 前言 这是 “Python 工匠”系列的第 8 篇文章。[查看系列所有文章] 装饰器 (Decorator) 是 Python 里的一种特殊工具,它为我们提供了一种在函数外部修改函数的灵活能力。它有点像一顶画着独一无二 符号的神奇帽子&#x…

记一次低级且重大的Presto运维事故

本文纯属虚构,旨在提醒各位别犯类似低级错误。 如有雷同,说的就是你! 文章目录 前言事件回顾后续总结 前言 首先,要重视运维工作和离职人员的交接工作,这个不必多说。一将无能,累死三军! 接下来…

密码学的100个基本概念

密码学作为信息安全的基础,极为重要,本文分为上下两部分,总计10个章节,回顾了密码学的100个基本概念,供小伙伴们学习参考。本文将先介绍前五个章节的内容。 一、密码学历史 二、密码学基础 三、分组密码 四、序列密码 五、哈希…