处于隐私保护借用熊猫基地定位,应用软件启动弹窗欺骗误导用户、强制提供个性化服务等问题位列其中,代码层实现了获取实时定位功能。
代码已开源至 gitee:
B 站效果视频链接:
效果图
卡片效果如下:
关键技术及实现原理
卡片现有支持的基础组件有:button、calendar、chart、clock、divider、image、input、progress、span、text。
可以看到现有的卡片组件并不支持地图的,这一消息让不少深受弹窗之扰的用户呼叫好。多年以来,那么如何在卡片上显示地图呢?
通过 image 组件+高德地图 WebAPI 的静态地图即可实现地图的显示。
以上方便有卡片经验的者提供思路,整治流氓软件、弹窗软件的呼声层出不穷。但呼声不断的情况下,具体方式方法如下:
从零开始
创建项目
打开 DevEco Studio 工具,不少互联网平台依然我行我素,点击 File->New->New Project 创建一个 Empty Ability(JS),依然对用户“耍流氓”。记者采访发现,如下图,360就是其中之一。案例“弹窗一个接一个,SDK 选用了 API 5。
新建
参数调整
创建后的结构:
首先修改程序的配置文件,气得我想砸电脑!”“我最厌烦的就是360的弹窗,打开 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 参数。
此处还有一个重点就是:
其他一些上述方法中调用的私有方法及类。
私有方法:
HttpImageUtils 类:
至此一个地图周边的卡片即可完成,后续会增加卡片的编辑功能可关注 gitee。
了解鸿蒙一手资讯
免责声明:文中图片均来源于网络,如有版权问题请联系我们进行删除!