专栏首页C++核心准则原文翻译自学HarmonyOS应用开发(53)- 获取当前位置

自学HarmonyOS应用开发(53)- 获取当前位置

目前的地图软件只能表示固定位置的地图,我们希望在画面第一次启动时能够显示当前所在位置的地图。

声明定位权限

修改所在HAP的config.json文件,以便获取定位权限:

"reqPermissions": [
  ...
  {
    "name": "ohos.permission.LOCATION",
    "reason": "$string:reason_location",
    "usedScene": {
      "ability": [
        "com.myapplication.LocationAbility"
      ],
      "when": "always"
    }

},
...

申请定位权限

我们通过以下两个方法是申请定位权限的代码:

private void register(Context ability) {
    context = ability;
    requestPermission(PERM_LOCATION);
}

private void requestPermission(String permission) {
    if (context.verifySelfPermission(permission) != IBundleManager.PERMISSION_GRANTED) {
        context.requestPermissionsFromUser(new String[] {permission}, 0);
    }
}

有了这两个方法,我们只要在适当的位置调用register方法就可以了。

注册定位响应代码

申请当前位置是一个异步处理,需要准备并注册一个回调对象:

private void registerLocationEvent() {
    if (hasPermissionGranted(PERM_LOCATION)) {
        locator = new Locator(context);
        requestParam = new RequestParam(RequestParam.SCENE_NAVIGATION);
        locator.requestOnce(requestParam, locatorCallback);
    }
}

private void unregisterLocationEvent() {
    if (locator != null) {
        locator.stopLocating(locatorCallback);
    }
}

private boolean hasPermissionGranted(String permission) {
    return context.verifySelfPermission(permission) == IBundleManager.PERMISSION_GRANTED;
}

private class MyLocatorCallback implements LocatorCallback {
    @Override
    public void onLocationReport(Location location) {
        HiLog.info(LABEL, "onLocationReport");
        TaskDispatcher uiTaskDispatcher = owner_slice.getUITaskDispatcher();
        Revocable revocable = uiTaskDispatcher.asyncDispatch(new Runnable() {
            @Override
            public void run() {
                tileMap.setLocation(location.getLongitude(), location.getLatitude());
            }
        });
    }

    @Override
    public void onStatusChanged(int type) {
    }

    @Override
    public void onErrorReport(int type) {
    }
}

在registerLocationEvent方法用来注册一个单次定位事件请求;在定位事件响应对象中我们将获得的位置信息通知给地图对象。

参考代码

获取设备的位置信息:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/device-location-info-0000000000031900

完整代码可以从以下链接下载:

https://github.com/xueweiguo/Harmony/tree/master/StopWatch

参考资料

Slippy map tilenames(包含各种转换示例代码):

https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames\

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自学HarmonyOS应用开发(50)- 获取瓦片地图数据

    读者可以参照文后的链接了解瓦片地图的原理,这里不再重复。简单地说,瓦片地图就是将地图根据缩放层级进行分割,例如缩放层级为3,就表明将地图分为2的3次方行和2的3...

    面向对象思考
  • 自学HarmonyOS应用开发(51)- 获取瓦片地图数据(续)

    以下是获取瓦片数据的代码。由于整个获取过程的时间无法确定,因此将获取动作放入另外的任务。获取任务结束之后再触发UI线程的更新动作。

    面向对象思考
  • Android利用自带的位置服务,获取当前位置信息

    笔者项目里,需要获取用户的当前位置信息,因为没有接地图SDK,打算用原生自带的位置服务去做。操作了一下,踩了几个大坑,总算是幸不辱命。这里做个记录,顺便分享给大...

    饮水思源为名
  • 自学HarmonyOS应用开发(54)- 校正定位偏差

    经过一番调查,结论是gps信号使用的是WGS-84坐标系,而高德地图使用的是GCJ-02火星坐标系,只有经过坐标变换才能显示正确的位置。这方面的文章网上有很多,...

    面向对象思考
  • 十问华为HarmonyOS:开源一个月,开发者生态建设进度如何?

    基础软件的开源面临着非常大的挑战,除了技术研发困难重重,开源生态和社区的建设更是难上加难。9 月 10 日,在华为开发者大会 2020 上,华为消费者业务 CE...

    深度学习与Python
  • HarmonyOS与Android的全面对比

    第二是我个人非常看好鸿蒙系统的未来,清楚明白华为和一些民族企业担负的责任和国人的期待,虽然带着一些民族感情;鸿蒙刚发布的时候自己是非常激动的,但是后来项目太忙一...

    肉眼品世界
  • 技术分析 | HarmonyOS到底是不是Android套皮?

    最近鸿蒙系统关注度好高,支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词,吵的不可开交。

    刘盼
  • 配置鸿蒙Windows烧录环境 && 用Hiburn烧录第一个程序

    如果已安装Visual Studio Code,打开命令行工具,输入code --version命令,检查版本号是否为1.45.1及以上版本;可以正常返回版本号...

    跋扈洋
  • Net微信网页开发之使用微信JS-SDK获取当前地理位置

      前段时间有一个关于通过获取用户当前经纬度坐标,计算出该用户距离某指定地点之间的距离。因为做这个项目需要能够获取到比较精确的经纬度坐标,刚开始使用的是百度地图...

    追逐时光者
  • 牛掰了!鸿蒙与Android完美融合,将鸿蒙设备当Android设备用

    1. 你看着是鸿蒙,其实它是Android,你看着是Android,其实它是鸿蒙

    蒙娜丽宁
  • HarmonyOS简介

    前两天,华为发布了HarmonyOS 2.0,俺也赶个时髦,给大家简单介绍下HarmonyOS。

    xiangzhihong
  • 展现鸿蒙的独特魅力:跨设备调用窗口(Page Ability)

    HarmonyOS的核心特性(或称为卖点)之一就是软总线技术,而Page Ability的跨设备迁移是软总线的一个具体技术实现。所谓跨设备迁移Page Abil...

    蒙娜丽宁
  • 【HarmonyOS 专题】02 搭建简单登录页面

    和尚在搭建完 HarmonyOS 环境之后,有很长时间没有研究过 HarmonyOS,DevEco Studio 已经更新了多个版本,和尚在升级完 ID...

    阿策小和尚
  • 华为鸿蒙生态的目标:市占率16%以上,跨过生死线

    9 月 10 日,华为正式推出 鸿蒙 OS 2.0 版本(HarmonyOS 2.0),并宣布将 Harmony OS 的代码捐赠给开放原子开源基金会进行开源孵...

    深度学习与Python
  • 【第22期】HarmonyOS应用开发(基础篇)

    这不就是说,以后华为手机都是鸿蒙系统了嘛?鸿蒙还发出了一条视频,视频中显示2021年6月2号将开启鸿蒙操作系统及华为全场景新品发布会。预计现在支持EMUI11升...

    siberiawolf
  • 抢先学鸿蒙(HarmonyOS)2.0,你就是下一个大咖!

    2020年9月10日,华为开发者大会发布了鸿蒙(HarmonyOS)2.0。HarmonyOS是全场景操作系统。也就是说,从理论上,HarmonyOS可以在任何...

    蒙娜丽宁
  • HarmonyOS-对Android开发者也太友好了吧

    2020年9月10日,华为消费者业务软件部总裁王成录又一次站在了松山湖华为开发者大会的主舞台上。今年,他带来了万众瞩目的华为鸿蒙HarmonyOS2.0...

    Android扫地僧
  • Re:从零开始的鸿蒙开发教程

    HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS...

    yuanyi928
  • 【HarmonyOS 专题】01 基础 Mac 环境安装配置

    HarmonyOS 已于 2020 年 12 更新到 2.0 版本;和尚周围的人都在学习和研究,和尚也想学习一下;今天和尚从 0 开始学习,第一步简单介绍基础...

    阿策小和尚

扫码关注云+社区

领取腾讯云代金券