继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

HarmonyOS NEXT 获取当前位置信息

水滴石轩
关注TA
已关注
手记 17
粉丝 0
获赞 3

在鸿蒙原生开发中,位置信息属于半开放隐私信息,开发中要想获取当前设备信息,需要向用户弹框申请权限

及需要再module.json5添加权限列表

"requestPermissions": [
  { "name": "ohos.permission.LOCATION",
    "reason": "$string:permissionsReason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when":"always"
    }
  },
  { "name": "ohos.permission.APPROXIMATELY_LOCATION",
    "reason": "$string:permissionsReason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when":"always"
    }
  }
]

此处我申请了ohos.permission.LOCATION和ohos.permission.APPROXIMATELY_LOCATION两个权限,这两个权限中ohos.permission.APPROXIMATELY_LOCATION是模糊定位权限,ohos.permission.LOCATION是精准定位权限;字面意思,更精准但也更好性能

在module.json5中添加权限申请后,根据业务需求是在entryAbility中添加用户弹框还是在调用的地方添加用户弹框,具体权限申请请查看https://developer.huawei.com/consumer/cn/blog/topic/03177279673669013

权限搞定后,可以获取定位信息了

const TAG: string = ‘GRLocation’;
/**

  • 获取系统缓存的最新位置
  • 如果系统当前没有缓存位置会返回错误码。
  • 推荐优先使用该接口获取位置,可以减少系统功耗。
  • 如果对位置的新鲜度比较敏感,可以先获取缓存位置,将位置中的时间戳与当前时间对比,若新鲜度不满足预期可以使用方式二获取位置
  • @returns 缓存的最新位置
    */
    export function getLastLocation(): geoLocationManager.Location | undefined {
    try {
    let location = geoLocationManager.getLastLocation();
    return location;
    } catch (err) {
    console.info(TAG, “errCode:” + err.code + “, message:” + err.message);
    return undefined;
    }
    }

/**

  • 获取当前位置, 通过本模块获取到的坐标均为WGS-84坐标系坐标点
  • 坐标转换:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/map-convert-coordinate-V14
  • 首先要实例化SingleLocationRequest对象,用于告知系统该向应用提供何种类型的位置服务,以及单次定位超时时间。
  • 设置LocatingPriority:
  • 如果对位置的返回精度要求较高,建议LocatingPriority参数优先选择PRIORITY_ACCURACY,会将一段时间内精度较好的结果返回给应用。
  • 如果对定位速度要求较高,建议LocatingPriority参数选择PRIORITY_LOCATING_SPEED,会将最先拿到的定位结果返回给应用。
  • 两种定位策略均会同时使用GNSS定位和网络定位技术,以便在室内和户外场景下均可以获取到位置结果,对设备的硬件资源消耗较大,功耗也较大。
  • 设置locatingTimeoutMs:
  • 因为设备环境、设备所处状态、系统功耗管控策略等的影响,定位返回的时延会有较大波动,建议把单次定位超时时间设置为10秒。
    */
    export function getCurrentLocation() {
    let request: geoLocationManager.SingleLocationRequest = {
    ‘locatingPriority’: geoLocationManager.LocatingPriority.PRIORITY_LOCATING_SPEED,
    ‘locatingTimeoutMs’: 10000
    }
    try {
    geoLocationManager.getCurrentLocation(request).then((result) => { // 调用getCurrentLocation获取当前设备位置,通过promise接收上报的位置
    console.info(TAG, 'current location: ’ + JSON.stringify(result));
    })
    .catch((error: BusinessError) => { // 接收上报的错误码
    console.info(TAG, ‘promise, getCurrentLocation: error=’ + JSON.stringify(error));
    });
    } catch (err) {
    console.info(TAG, “errCode:” + JSON.stringify(err));
    }
    }
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP