首页 > 其他分享 >【HarmonyOS】低代码元服务开发中的地图实现

【HarmonyOS】低代码元服务开发中的地图实现

时间:2023-05-25 17:35:27浏览次数:41  
标签:API 代码 地图 HarmonyOS html WebView webView 加载

在元服务开发过程中,大家可能需要在应用中使用地图,如果使用SDK集成的方式,地图SDK包体积大小很大,集成后元服务大小可能会超过10M,这就超出了HAP包的大小限制。那么是否有其他途径可以在元服务中使用地图呢?笔者最近在学习AGC新推出的低代码开发元服务的文档时发现,他的景区模板(模板简介-基于模板开发元服务-低代码平台开发元服务-AppGallery Connect帮助中心 | 华为开发者联盟 (huawei.com))集成了地图但是并没有通过SDK的方式导入的地图,使用的是WebView+本地html+腾讯Javascript API GL的方式实现的地图,下面给大家讲述一下具体实现的流程。

【腾讯地图Javascript API GL】

首先我们在在腾讯地图官网找到Javascript API GL的文档JavaScript API | 腾讯位置服务 (qq.com)

1、我们需要注册帐号并且在控制台创建应用和key,然后就可以运行demo查看是否可以正常加载地图了。

【HarmonyOS】低代码元服务开发中的地图实现_加载

2、这边我们将示例中的代码,拷贝到新建的文件demo.html中,将demo.html文件放置于HarmonyOS工程的资源目录下(entry/src/main/resources/rawfile/)。将上面申请的key替换示例代码中<script src="https://map.qq.com/api/gljs?v=1.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"></script>这边的key

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <title>Hello world!</title>
   <style type="text/css">
   #container{
       /*地图(容器)显示大小*/
       width:1200px;
       height:400px;
   }
   </style>
   <!--引入Javascript API GL,参数说明参见下文-->
   <script src="https://map.qq.com/api/gljs?v=1.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"></script>
   <script>
       //地图初始化函数,本例取名为init,开发者可根据实际情况定义
       function initMap() {
           //定义地图中心点坐标
           var center = new TMap.LatLng(39.984120, 116.307484)
           //定义map变量,调用 TMap.Map() 构造函数创建地图
           var map = new TMap.Map(document.getElementById('container'), {
               center: center,//设置地图中心点坐标
               zoom: 17.2,  //设置地图缩放级别
               pitch: 43.5, //设置俯仰角
               rotation: 45   //设置地图旋转角度
           });
       }
   </script>
</head>
<!-- 页面载入后,调用init函数 -->
<body "initMap()">
   <!-- 定义地图显示容器 -->
   <div id="container"></div>
</body>
</html>

【HarmonyOS】低代码元服务开发中的地图实现_html_02

3、需要注意的是腾讯地图已经不再支持file://的方式使用Javascript API GL,所以我们在Android中通过WebView加载这个本地的html文件是无法使用这个JS API的

webView.loadUrl("file:///android_asset/demo.html");

【HarmonyOS】低代码元服务开发中的地图实现_API_03

【HarmonyOS】低代码元服务开发中的地图实现_html_04

那是不是HarmonyOS中我们也束手无策了呢?

很惊喜的是:出于安全考虑,HarmonyOS中WebView虽然不支持直接通过File协议加载资源文件或本地文件。但是可以通过加载https或者http地址的方式,加载本地的html文件,如下:

webView.load("https://example.com/rawfile/example.html");

这正好解决了我们的问题。

【WebView加载本地Html】

加载地图之前我们需要完成工程的权限设置,应用使用的是Web地图所以需要申请网络权限如下:

"reqPermissions": [
 {
   "name": "ohos.permission.INTERNET",
   "mergeRule": {
     "remove": [
       "reason"
     ]
   }
 }

]

【HarmonyOS】低代码元服务开发中的地图实现_API_05

然后我们需要实现的是WebView加载本地Html,在官网我们可以找到加载资源文件和本地文件的方法(WebView-常用组件开发指导-Java UI框架-UI-基于Java开发-开发-HarmonyOS应用开发

这边使用的是通过processResourceRequest方法访问文件,具体代码如下:

WebView webView= (WebView) findComponentById(ResourceTable.Id_webview);
webView.getWebConfig().setJavaScriptPermit(true);
webView.getWebConfig().setWebStoragePermit(true);

webView.setWebAgent(new WebAgent() {
   @Override
   public ResourceResponse processResourceRequest(WebView webview, ResourceRequest request) {
       final String authority = "com.example.javawebmap";
       final String rawFile = "/rawfile/";
       Uri requestUri = request.getRequestUrl();
       if (authority.equals(requestUri.getDecodedAuthority())) {
           String path = requestUri.getDecodedPath();
           if (TextTool.isNullOrEmpty(path)) {
               return super.processResourceRequest(webview, request);
           }
           if (path.startsWith(rawFile)) {
               // 根据自定义规则访问资源文件
               String rawFilePath = "entry/resources/rawfile/" + path.replace(rawFile, "");
               String mimeType = URLConnection.guessContentTypeFromName(rawFilePath);
               try {
                   Resource resource = MainAbilitySlice.this.getContext().getResourceManager().getRawFileEntry(rawFilePath).openRawFile();
                   return new ResourceResponse(mimeType, resource, null);
               } catch (IOException e) {
                   HiLog.info(TAG, "open raw file failed " + e.getMessage());
               }
           }
       }
       return super.processResourceRequest(webview, request);
   }

});

【HarmonyOS】低代码元服务开发中的地图实现_API_06

最后我们通过load的方式加载本地的demo.html文件

webView.load("https://com.example.javawebmap/rawfile/demo.html");

【HarmonyOS】低代码元服务开发中的地图实现_API_07

【运行效果】

最后我们就可以看到运行的效果了

【HarmonyOS】低代码元服务开发中的地图实现_API_08

如果需要跟地图进行进一步的开发或者交互我们可以使用webView.addJsCallback的方式,这个在上面的WebView使用说明中同样也有。至此我们通过WebView和腾讯地图Javascript API GL的方式完成简单地图的加载。

【参考文章】

模板简介-基于模板开发元服务-低代码平台开发元服务-AppGallery Connect帮助中心 | 华为开发者联盟 (huawei.com)

WebView-常用组件开发指导-Java UI框架-UI-基于Java开发-开发-HarmonyOS应用开发

JavaScript API | 腾讯位置服务 (qq.com)



欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh


标签:API,代码,地图,HarmonyOS,html,WebView,webView,加载
From: https://blog.51cto.com/u_14772288/6350324

相关文章

  • 想增速又提效?又想数字化转型?来了解下低代码快速开发平台
    前言:当前,数字化转型升级是不少企业今后要坚定不移的发展方向。在职场中,如何提升办公协作效率?如何让企业内部的数据做好统一管理,发挥它应有的价值和作用?如何帮助企业快速进入数字化转型升级的新道路?这些问题都可以让低代码快速开发平台来解决。因为专业的事交由专业的机构来实现,能......
  • Ansible_Runner run函数代码详解
    需求背景:随着第一版远程执行发布使用paramiko模块进行远程调用脚本的稳定,开始着手第二版关于使用ansiblerunner执行远程发布任务paramiko和ansiblerunner各自的优缺点:Paramiko:Paramiko是一个Python的SSH库,用于在远程主机上执行命令。优点:直接通过SSH连接到远程主机,无需......
  • 突围低代码下半场,未来悬而未决
    低代码行业的整个赛道的未来依然蒙着一层充满未知的迷雾,最开始,低代码的目的是让不具有软件开发能力的用户也能根据自己的需要创建各种应用程序,由此也诞生了“IT革命”“抢走程序员饭碗”等噱头。但噱头归噱头,程序员的饭碗并未被低代码一掌拍翻,反而是低代码自身尚难自证“我是好人......
  • 500代码行代码手写docker-设置网络命名空间
    (4)500代码行代码手写docker-设置网络命名空间本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。本章的源码已经上传到github,地址如下:......
  • 从领英退出中国,解析融云《社交泛娱乐出海作战地图》从0到1出海方法论
    近期,“领英职场”宣布将于2023年8月9日起正式停止服务。移步【融云全球互联网通信云】回复“地图”免费领一时之间,网友纷纷送上祭文。有人觉得猝不及防,但更多人直言并不意外。领英在中国的折戟终局,似乎从2021年改版就提前预定了。彼时,领英中国砍掉了堪称其吸引用户杀手锏的......
  • IOS快捷指令代码分享
    IOS快捷指令分享制作快捷指令首先在快捷指令APP上制作快捷指令添加一些逻辑,具体可以自己体验然后点击共享,获取iCloud链接类似于这种https://www.icloud.com/shortcuts/02b1494ad19e49a29ce1189f0391a99a可能在手机上分享会报未登录iCloud,但是也没给出登陆的地方,其实在设......
  • 通过Java代码备份Mysql数据库
    MainpublicclassMain{publicstaticvoidmain(String[]args){//备份数据库BakDb.bakDB();//获取本地备份的sql文件List<String>names=Unitls.sqlFileNameByLocal();//获取最后一个文件名Stringname=names......
  • 源代码管理工具
    什么是源代码管理工具?源代码管理(SCM)工具是一种软件应用程序,它提供了一个集中位置来存储、管理和版本控制源代码文件和其他软件开发工件。当多个开发人员对同一文件进行更改时,它允许开发人员团队跟踪更改、协作处理功能并解决冲突,从而帮助开发人员团队在代码库上协同工作。使......
  • 地图导航系统
    一饭多吃.jpg放个最初版本,A*求最短路#include"Logger.h"#include"ColorUtils.h"#include"ImgUtils.h"#include<graphics.h>#include<windows.h>#include<iostream>#include<conio.h>#include<cstdio>#include<......
  • 关于源代码管理工具的介绍与实际使用技巧
      当谈到主流的源代码管理工具时,GitHub和AzureDevOps(之前称为TFS,即TeamFoundationServer)是两个备受推崇的选择。我将重点介绍GitHub,并说明如何将其与团队项目结合起来。  GitHub是一个在线软件源代码托管服务平台,使用Git作为版本控制软件,由开发者ChrisWanstrath、P.J.H......