当前位置:   article > 正文

HarmonyOS Connect原子化服务功能开发(Wi-Fi/Combo)设备控制开发与实现(一)_原子化服务连接网络

原子化服务连接网络

设备控制分为两种方式,极速配网(NAN)控制和常规设备控制。极速配网(NAN)控制是在配网的过程中即可对设备进行控制,当前只有Hi3861芯片支持。常规设备控制,只有在设备配网成功之后才能进行设备控制。

跳转到设备控制界面

无论是进入到配网界面,还是进入到设备控制界面,都是首先由智慧生活基础服务拉起意图里配置好的Ability,再在onStart函数里面,解析传递过来的参数。关于参数解析,请参考设备配网的步骤1

解析完成之后,再根据传递的参数不同,进行不同的跳转。

在“entry”目录下的“CommonOperatorUtil.java”文件中,关于跳转到设备控制界面,代码示例如下:

  1. // 跳转到设备控制页示例代码
  2. private static final String BUNDLE_NAME = "{your package name}";
  3. private static final String DEVICE_ABILITY_NAME = "{your package name}.ControlMainAbility";
  4. private void openDevicePage() {
  5. Intent intent = new Intent();
  6. // 如果配网方式是常规配网(SoftAP)或者蓝牙辅助配网(BLE),跳转控制页时需要传deviceId
  7. intent.setParam("deviceId", deviceId);
  8. // 如果配网方式是极速配网(NAN),跳转控制页时需要传sessionId
  9. // intent.setParam("session_id", sessionId);
  10. ElementName elementName = new ElementName("", BUNDLE_NAME, DEVICE_ABILITY_NAME);
  11. intent.setElement(elementName);
  12. intent.addFlags(Intent.FLAG_ABILITY_NEW_MISSION);
  13. intent.addFlags(Intent.FLAG_INSTALL_ON_DEMAND);
  14. mContext.startAbility(intent, 0);

NAN配网控制

  1. 在“device”目录下的“DeviceAbility.java”文件中,进入到控制界面后,在onStart函数里解析传递过来的参数,并进行NAN控制的注册,代码示例如下:

 

  1. @Override
  2. public void onStart(Intent intent) {
  3. intent.setParam("window_modal", HALF_MODAL);
  4. String sessionId = intent.getStringParam("sessionId");
  5. NetConfigAbility.register(this, sessionId);
  6. setPageParams("", intent.getParams());
  7. super.onStart(intent);
  8. }
  9. 2.在“device”目录下的“index.js”文件中,注册监听设备侧消息回调和监听NAN配网回调,代码示例如下:
  10. // NAN接收设备注册结果接口:当NAN配网成功后,可以获取到该设备的deviceId,这时用户可以选择通过deviceId进行设备控制
  11. registerNanNetConfigStatusCallback() {
  12. const commonInfo = {
  13. sessionId: this.sessionId,
  14. };
  15. FANetConfig.registerNanNetConfigStatusCallback(commonInfo, (result) => {
  16. if (result.code == 0) {
  17. // TODO: 配网成功,获取到该设备的deviceId,这时用户可以选择通过deviceId进行设备控制
  18. this.deviceId = result.data;
  19. } else {
  20. // TODO: 配网失败
  21. }
  22. });
  23. },
  24. // 接收设备侧消息接口:在该回调中可以获取设备状态信息,对设备对应的状态进行刷新(如开关状态等)
  25. registerMsgReceive() {
  26. const commonInfo = {
  27. sessionId: this.sessionId,
  28. nanDataType: 1
  29. };
  30. FANetConfig.registerMsgReceive(commonInfo, (value) => {
  31. // TODO: 监听获取设备状态信息,对设备对应的状态进行刷新(如开关状态等)
  32. });
  33. },
  34. // 释放配网通道接口:
  35. disconnectNan: function () {
  36. const commonInfo = {
  37. sessionId: this.sessionId
  38. };
  39. FANetConfig.disconnectDevice(commonInfo, (value) => {
  40. });
  41. },
  42. 3.在“device”目录下的“index.js”文件中,下发设备控制命令,代码示例如下:
  43. // 秒控接口
  44. sendMessage: (serviceId, data) {
  45. const commonInfo = {
  46. sessionId: this.sessionId,
  47. nanDataType: 1,
  48. serviceId: serviceId, // 要控制的设备服务的ID(例如:设备的开关按钮的服务ID是:"switch"
  49. hiLinkControlData: data // 控制的参数(例如:设备的开关按钮,开的控制参数是:{on1})
  50. };
  51. FANetConfig.sendMessage(commonInfo, '1', (value) => {
  52. // TODO: 下发控制命令成功后,可以在registerMsgReceive监听器中获取到该设备的状态变化信息,进行页面刷新
  53. });
  54. },

本文主要引用整理自官方文档。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/276210?site
推荐阅读
相关标签
  

闽ICP备14008679号