HarmonyOS获取设备地理位置实战_harmony获取定位

集成功能模块

▍****向用户动态申请授权的基础功能模块

获取设备地理位置信息的前提是用户同意提供相关敏感权限,这意味着我们需要向用户动态申请相关所需权限。而此次关于向用户动态申请授权的模块,笔者将把它们集成在Service目录下的两个TS文件里,分别是Applicant.ts与Detector.ts。

完成Demo的UI设计后,可以打开预览器查看界面效果

图片

集成功能模块

▍****向用户动态申请授权的基础功能模块

获取设备地理位置信息的前提是用户同意提供相关敏感权限,这意味着我们需要向用户动态申请相关所需权限。而此次关于向用户动态申请授权的模块,笔者将把它们集成在Service目录下的两个TS文件里,分别是Applicant.ts与Detector.ts。

图片

之后,我们在Index.ets中对其进行调用

//导入common
import common from '@ohos.app.ability.common'
//导入向用户发起权限申请的模块
import Request_Permission_From_Users from 'ets/Service/Applicant'

@Entry
@Component
struct Index {

 ......
  
  //获取上下文对象, 储存在成员变量context中
  private context = getContext(this) as common.UIAbilityContext

  //编写异步方法,调用之前已写好的模块文件Applicant
  async apply(){
    let res = await Request_Permission_From_Users(this.context)
    this.ifAccessible = res
    if(res){
      this.dialogController_Accessible.open()
    }else{
      this.dialogController_Inaccessible.open()
    }
  }

  build() {
    Column({space:10}) {

     ......

        Column(){
          Button('获取相关权限')
            .width('90%')
            .fontSize(18)
            .backgroundColor(Color.Pink)
            //调用异步方法apply
            .onClick(()=>{
              this.apply()
            })

         ......

        }
        .height('100%')
        .layoutWeight(4)
        .backgroundColor(Color.White)

      }
      .height('11%')
      .width('92%')

 ......

  }

}

获取设备地理信息的功能模块

此功能模块的目的是输出设备所在地的经度,纬度,海拔高度和城市名,以及设备的速度(应该是瞬时的)。这需要先获取设备所在的地理位置坐标,再将地理位置坐标转化为具体的地理描述(即国家,城市等)。

在Service目录下新建一个TypeScript文件(右键Service目录,选择新建,再选择TypeScript),将其命名为Geo

图片

在编辑器中打开目录Geo.ts,加入以下代码以集成获取设备地理信息的功能,各代码块的具体功能已写注解

//导入位置服务模块
import geoLocationManager from '@ohos.geoLocationManager';

//导入自定义的权限检查模块
import Check_Access from 'ets/Service/Detector'

//定义结点的标签
const TAG_NODE0 = '------[Geo-Node0] '
const TAG_NODE1 = '------[Geo-Node1] '
const TAG_NODE2 = '------[Geo-Node2] '

/*
 *结点函数1:获取用户设备当前所处位置的经度和纬度数据
 */
async function Node1_Get_Geographical_Position(){

  //预定义返回值
  let output = {
    'position_x':null,
    'position_y':null,
    'position_z':null,
    'cityName':' 未知',
    'speed':null,
    //结点函数的执行状态,默认为失败
    'isFinished':false,
    'error':'无'
  }

  //检查定位功能是否可用
  if(!geoLocationManager.isLocationEnabled()){
    console.info(TAG_NOD
  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值