卡片服务开发之如何开发一个地图服务卡片 原创 精华
前言
处于隐私保护借用熊猫基地定位,代码层实现了获取实时定位功能。
代码已开源至gitee:https://gitee.com/panda-coder/harmonyos-apps/tree/master/AMapCard
本人正在参加鸿蒙HarmonyOS征文的活动,觉得该文章有帮助的小伙伴麻烦帮我点个赞
B站效果视频链接:https://www.bilibili.com/video/BV1Rq4y1X7BC?share_source=copy_web
效果图
卡片效果 | 2x2+2x4 | 4x4 | 缩放 |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
关键技术及实现原理
卡片现有支持的基础组件有:button、calendar、chart、clock、divider、image、input、progress、span、text
可以看到现有的卡片组件并不支持地图的开发,那么如何在卡片上显示地图尼?
通过image组件+高德地图WebAPI的静态地图即可实现地图的显示。
-----------------以上方便有开发卡片经验的开发者提供思路,具体方式方法如下---------------------
从零开始
创建项目
打开DevEco Studio工具,点击File->New->New Project创建一个Empty Ability(JS)如下图:
SDK选用API 5
新建 | 参数调整 |
---|---|
![]() |
![]() |
创建后的结构:
首先修改程序的配置文件:
打开config.json,修改卡片支持类型情况:
添加权限:
配置完成还需要在MainAbility中显示的申明使用权限信息,详情参考文档配置相关内容:
打开MainAbility添加方法:
并在onStart方法中调用requestPermission();方法。
修改界面:
打开widget下的pages/index/imdex.hml
需要注意:卡片的事件不能使用表达式,不能使用for语句循环构建
样式调整文件pages/index/imdex.css:
json配置信息修改pages/index/index.json:
后台逻辑
由于更新卡片时需要提供formId,我们对FormController及FormControllerManager这两个帮助类进行一个修改
打开java目录下的FormController文件并添加受保护的属性 formId,并修改构造函数
然后进入FormControllerManager找到createFormController、getController、newInstance进行修改。
createFormController:
在newInstance方法中添加参数formId,如下图
getController:
在newInstance方法中添加参数formId,如下图
newInstace:
该方法是动态的创建WidgetImpl方法,类似于IOC作用
找到java目录下的widget/widget/widgetImpl,卡片的所有逻辑都在该文件内
首先修改构造函数及定义基础属性等
因上述修改了FormController及FormControllerManager构造函数必须增加Long formId参数
修改createFormController,该方法在卡片创建时调用,我们需要把页面需要的参数传递过去
注意网络图片需要使用“通过内存图片方式使用image组件”
初始化卡片后改进onTriggerFormEvent
该方法为接收卡片事件,message为事件传递的params参数
修改更新卡片信息的方法(此方法不仅是系统会定时刷新,也有主动刷新的调用如:卡片事件改变后调用,坐标改变后的调用,这也是需要修改FormController、FormControllerManager增加formId属性的原因,因为在主动刷新时需要formId参数)
此处还有一个重点就是 ((Ability)context).updateForm(formId,bindingData);
其它一些上述方法中调用的私有方法及类
私有方法:
HttpImageUtils类
--------至此一个地图周边的卡片即可开发完成,后续会增加卡片的编辑功能可关注gitee---------
觉得该文章有帮助的小伙伴麻烦帮我[点个赞]
厉害,B站跟过来,三连一波!
厉害厉害
很实用啊 鸿蒙的地图应用快更新卡片特性吧!!
厉害,B站跟过来,三连一波!