[文章]HarmonyOS Connect原子化服务功能开发(Wi-Fi/Combo)设备控制开发与实现(一)

阅读量0
0
0

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

跳转到设备控制界面

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

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

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

// 跳转到设备控制页示例代码

private static final String BUNDLE_NAME = "{your package name}";

private static final String DEVICE_ABILITY_NAME = "{your package name}.ControlMainAbility";

private void openDevicePage() {

    Intent intent = new Intent();

    // 如果配网方式是常规配网(SoftAP)或者蓝牙辅助配网(BLE),跳转控制页时需要传deviceId

    intent.setParam("deviceId", deviceId);

    // 如果配网方式是极速配网(NAN),跳转控制页时需要传sessionId

    // intent.setParam("session_id", sessionId);

    ElementName elementName = new ElementName("", BUNDLE_NAME, DEVICE_ABILITY_NAME);

    intent.setElement(elementName);

    intent.addFlags(Intent.FLAG_ABILITY_NEW_MISSION);

    intent.addFlags(Intent.FLAG_INSTALL_ON_DEMAND);

    mContext.startAbility(intent, 0);

}

NAN配网控制

  1. 在“device”目录下的“DeviceAbility.java”文件中,进入到控制界面后,在onStart函数里解析传递过来的参数,并进行NAN控制的注册,代码示例如下:
// NAN接收设备注册结果接口:当NAN配网成功后,可以获取到该设备的deviceId,这时用户可以选择通过deviceId进行设备控制

registerNanNetConfigStatusCallback() {

    const commonInfo = {

        sessionId: this.sessionId,

    };

    FANetConfig.registerNanNetConfigStatusCallback(commonInfo, (result) => {

        if (result.code == 0) {

            // **TODO:** 配网成功,获取到该设备的deviceId,这时用户可以选择通过deviceId进行设备控制

            this.deviceId = result.data;

        } else {

            // **TODO:** 配网失败

        }

    });

 

},

// 接收设备侧消息接口:在该回调中可以获取设备状态信息,对设备对应的状态进行刷新(如开关状态等)

registerMsgReceive() {

    const commonInfo = {

        sessionId: this.sessionId,

        nanDataType: 1

    };

    FANetConfig.registerMsgReceive(commonInfo, (value) => {

        // **TODO:** 监听获取设备状态信息,对设备对应的状态进行刷新(如开关状态等)

    });

},

// 释放配网通道接口:

disconnectNan: function () {

    const commonInfo = {

        sessionId: this.sessionId

    };

    FANetConfig.disconnectDevice(commonInfo, (value) => {

    });

},

1. 在“device”目录下的“index.js”文件中,下发设备控制命令,代码示例如下:

// 秒控接口

sendMessage: (serviceId, data) {

    const commonInfo = {

        sessionId: this.sessionId,

        nanDataType: 1,

        serviceId: serviceId, // 要控制的设备服务的ID(例如:设备的开关按钮的服务ID是:"switch")

        hiLinkControlData: data // 控制的参数(例如:设备的开关按钮,开的控制参数是:{on:1})

    };

    FANetConfig.sendMessage(commonInfo, '1', (value) => {

        // **TODO:** 下发控制命令成功后,可以在registerMsgReceive监听器中获取到该设备的状态变化信息,进行页面刷新

    });

},

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

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友