赞
踩
本人主要是做软件端设计和开发的,提出的问题和解决办法也是经过个人实践得来,思路主要是从软件端来设计,嵌入式大佬勿喷。
基于HarmonyOS的碰一碰配网主要用于对已经初始化完毕但是为接入互联网的设备进行配网工作,或者是当家用WIFI信息改变后需要让终端设备从新入网。
配网成功后可调用系统能力启动对应的控制程序,这里控制程序一共有两种设计方法:
在设计中最先需要解决的一个问题是控制程序如何知道终端设备所属的配网程序是哪一个?
我们事先将产品编号(在调试助手端申请)和设备编号(如果上云的话需要写入云端定义的设备编号)写入NFC标签中,并在华为云开发中联盟中定义标签所属的配网信息,包括包名,所调用的模块等。
写入NFC标签信息:如果设备要上云请将设备编号定义在设备SN处
华为开发者联盟云端配置
其次当我们的手机触碰标签后发生了什么?
当我们使用手机触碰标签后最先启动的不是配网程序,而是智慧生活服务助手。这里智慧生活服务助手主要负责获取NFC标签中的ProductID和设备SN信息,或者ProductID后前往开发者联盟服务查询该标签对应的配网信息和检查手机是否连接了WIFI,并且连接的WIFI是否可用。完成这两步后智慧生活服务助手根据bundleName启动对应的配网程序,并将获取的信息传递到配网程序中。
为什么我们的设备明明在线,启动配网程序后直接是100%失败而且智慧生活服务助手传递过来的sessionId是DEVICE_NOT_DOFUND而不是HASH值?
如果配网程序和控制程序是使用Java
和JavaScript开发的
那么Java
端从智慧生活服务助手获取到的deviceId或者是其他信息是如何提交给JavaScript
端的?
这个问题在HarmonyOS开发者文档里面给出了解释,在Java
端将需要传递的信息封装到IntentParams
中,然后直接传递intent
便可,在FA端使用onNewRequest
端接收数据。但是阅读文档发现onNewRequest
生命周期函数并不能接收数据,只告诉了我们如何发送数据并没有说如何接收数据,官网案例代码如下:
public void onNewIntent(Intent intent) {
String startParams = intent.getStringParam("__startParams");
if(startParams != null) {
ZSONObject zson = ZSONObject.stringToZSON(startParams);
IntentParams params = new IntentParams();
for (Map.Entry<String , Object> entry :zson.entrySet()) {
params.setParam(entry.getKey(), entry.getValue());
}
pushPage("pages/control/control", params);
}
super.onNewIntent(intent);
}
其实FA端并不用在onNewRequest
端显示的定义函数去接收参数,只需要在intent
所对应的页面的data
数据绑定模型中定义和Java端一致的变量便可,系统会自动将改参数从PA端注入到FA端中(是很方便声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/276208
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。