• 手把手教你玩转HarmonyOS版地图应用开发


    ​一、导读

    7月31日,华为HarmonyOS开发者日将在杭州举行。为了方便更多开发者,高德开放平台地图SDK已在业内率先实现鸿蒙化迁移和重构,全面适配HarmonyOS并面向开发者免费发布。开发者可到高德开放平台官网了解更多内容,获取版本下载、开发文档、常见问题等支持。

    访问高德开放平台:https://lbs.amap.com/

    在今年6月2日,华为就正式发布了HarmonyOS。由于HarmonyOS在兼容Android上有特殊要求,如果APP应用是用Android API开发,开发者可以直接使用Android的SDK。

    但如果APP用了HarmonyOS的API开发,就不能用Android的SDK而需要使用HarmonyOS版本的SDK。

    为了方便开发者在HarmonyOS的相应设备中进行LBS服务的开发,高德开放平台率先进行了HarmonyOS适配,首批适配范围包括地图和搜索SDK,支持嵌入搭载HarmonyOS的手机、Pad及其他智能终端设备。

    二、HarmonyOS地图SDK特性介绍

    与高德开放平台Android地图SDK平滑切换

    • 已集成高德开放平台Android地图SDK的开发者可无缝切换到HarmonyOS地图SDK,无额外开发量。HarmonyOS与Android系统间的接口变化由高德开放平台SDK适配层消化,SDK对外接口保持不变。
    • 高德底层引擎对接HarmonyOS NDK,上层代码全面对接HarmonyOS SDK,所有系统接口均使用HarmonyOS API。

    继承高德开放平台Android/iOS地图SDK功能亮点

    • 开发者可以通过高德开放平台API和SDK,轻松完成地图的构建工作,将地图精致地呈现在您的应用中。地图SDK不仅提供丰富的地图覆盖物绘制能力,也支持搜索、多种路径规划、坐标转换、距离测量、面积计算等功能。

    • 适配HarmonyOS后的地图SDK依旧支持与自定义地图SaaS平台等周边工具配合使用,开发者可以在平台中定制区域面、建筑物、水系、天空、道路、标注、行政边界共7大类40余种地图元素,灵活设计心仪的地图样式。更多地图SDK基础能力、自定义、可视化能力详情请参考高德开放平台官网。

    HarmonyOS版地图SDK整体框架

    HarmonyOS和Android系统差异很大,几乎所有的API都有调整,不少API都调整了实现方案,所以不能通过改包名来实现适配。我们将原生SDK中所有调用Android的代码均切换为适配层,在适配层将SDK的接口一一适配到HarmonyOS接口。

    HarmonyOS版地图SDK整体框架大致如下:

    三、如何集成-从零开始

    第一步 搭建HarmonyOS开发环境

    完成DevEco Studio安装、环境配置和工程创建,参考HarmonyOS官网说明:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/start-overview-000000000002960

    第二步 配置应用的签名信息

    应用工程创建完成后,需要配置签名信息,才可以使用真机调试和发布应用。

    第三步 获取应用的appId

    配置完签名信息之后,就可以获取当前应用的appId了,这个appId主要用于申请高德的apiKey,请确定最终发布应用的appId,防止最终高德SDK鉴权失败。

    通过代码获取应用的appId方式如下:

    getApplicationContext().getBundleManager().getBundleInfo(getBundleName(), 0).getAppId()

    注意:目前通过DevEco Studio连接云真机获取到的appId不全,只获取到了"包名_", 使用云真机调试高德地图SDK时会导致鉴权不通过。正确的appId形式为:"包名_签名信息", 例如:com.amap.demo_BGtGgVB3ASqU7XXXXV2/zhoYh6tFQHAd5DASWVTEAgvZfzrEGljjs=

    第四步 在高德开放平台官网控制台申请API Key

    创建新应用

    从开放平台官网右上角入口-控制台,创建一个新应用。如果您之前已经创建过应用,可直接跳过这个步骤。

     

    添加新Key

    在创建的应用上点击"添加新Key"按钮,在弹出的对话框中,依次:输入应用名名称,选择绑定的服务为“Harmony平台SDK”,输入AppID,如下图所示:

    需要注意:1个Key只能用于一个应用(多渠道安装包属于多个应用),1个Key在多个应用上使用会出现服务调用失败。

    在阅读完高德地图API服务条款后,勾选此选项,点击“提交”,完成Key的申请,此时您可以在所创建的应用下面看到刚申请的Key了。

    第五步 在代码中设置申请的Key

    请使用API的方式将申请的高德API Key设置给高德地图SDK。

    /**
     * 动态设置apiKey。
     *
     * @param apiKey 在高德官网上申请的apiKey。
     */
    MapsInitializer.setApiKey(String apiKey)

    注意:请确保在调用任何高德地图SDK的接口之前将API Key设置给高德地图SDK,建议放到Application的初始化之中。

    完成以上5步之后,就可以愉快的使用HarmonyOS版高德地图SDK了。

    四、如何使用-创建地图

    使用地图SDK之前,需要在config.json文件中进行相关权限设置,确保地图功能可以正常使用。

    第一步 配置config.json

    首先,声明权限。

    ...
    "reqPermissions": [
          {
            "usedScene": {
              "ability": [
                "com.example.harmonysearchsdk.MainAbility"
              ],
              "when": "always"
            },
            "reason": "request internet",
            "name": "ohos.permission.INTERNET"
          }
        ]
    ...

    第二步 向工程中添加地图开发包

    将har包放入libs目录下,依次添加依赖。

    dependencies {
        implementation files("libs/xxx.har")
        //...
    }

    或者直接使用引入libs下所有har包的方式:

    dependencies {
      implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
        //...
    }

    第三步 初始化地图容器

    设置Key

    获取Key方式请参考上方“从零开始”章节第四步。

    MapsInitializer.setApiKey("您的key");

    创建MapView

    public class BasicMapDemoSlice extends Ability {
    
        private MapView mapView;
    
        @Override
        protected void onStart(Intent intent) {
            super.onStart(intent);
            initMapView();
        }
    
        private void initMapView() {
            mapView = new MapView(this);
    
            mapView.onCreate(null);
            mapView.onResume();
            DirectionalLayout.LayoutConfig config = new DirectionalLayout.LayoutConfig(
                    DirectionalLayout.LayoutConfig.MATCH_PARENT, DirectionalLayout.LayoutConfig.MATCH_PARENT);
            mapView.setLayoutConfig(config);
            super.setUIContent(mapView);
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            if (mapView != null) {
                mapView.onDestroy();
            }
        }
    }

    初始化地图并获取AMap对象

    AMap aMap = mapView.getMap();
    aMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {
        @Override
        public void onMapLoaded() {
        // todo
        }
    });

    至此就可以看到地图展示,并且拿到AMap对象后,就可以往地图上添加点线面等覆盖物了。

    五、获取更多详情和开发支持

    访问高德开放平台:https://lbs.amap.com/

    获取HarmonyOS版高德地图SDK下载、开发文档、Demo等开发支持:https://lbs.amap.com/api/harmonyos-sdk/summary/

  • 相关阅读:
    【转】编写高质量代码改善C#程序的157个建议——建议70:避免在调用栈较低的位置记录异常
    【转】编写高质量代码改善C#程序的157个建议——建议69:应使用finally避免资源泄漏
    【转】编写高质量代码改善C#程序的157个建议——建议68:从System.Exception或其他常见的基本异常中派生异常
    【转】编写高质量代码改善C#程序的157个建议——建议67:慎用自定义异常
    Arrays数组工具类中存在的坑!
    java.util.ArrayList
    java.util包下面的类---------01---示意图
    elasticsearch从入门到出门-08-Elasticsearch容错机制:master选举,replica容错,数据恢复
    elasticsearch从入门到出门-06-剖析Elasticsearch的基础分布式架构
    CentOS7.1安装 Vsftpd FTP 服务器
  • 原文地址:https://www.cnblogs.com/amap_tech/p/15079551.html
Copyright © 2020-2023  润新知