鸿蒙HarmonyOS SDK
事件监听

事件监听

SDK 使用 GizState<T> 暴露登录、设备、通信状态和数据点事件。subscribe() 默认立即回调当前值,并返回取消订阅函数。

用户状态

const unsubscribeUser = userManager.subscribeUserState().subscribe((state): void => {
  // 将登录状态和用户资料同步到 ArkUI。
});

绑定设备列表

const unsubscribeBound = userManager.subscribeBoundDeviceList().subscribe((profiles): void => {
  // 云端绑定设备发生变化。
});

数据点事件

import { GizDataPointEvent } from '@gizwits/smart-sdk';
import { hilog } from '@kit.PerformanceAnalysisKit';
 
const unsubscribeData = device.subscribeDataPointEvents().subscribe(
  (event: GizDataPointEvent | undefined): void => {
    if (event !== undefined) {
      hilog.info(0x0000, 'GizwitsSample', 'Data source: %{public}s', String(event.source));
    }
  }
);

subscribeDataPoints() 只提供合并后的当前值;subscribeDataPointEvents() 还包含本次事件的来源、告警和故障。通过 event.source 可区分 BLE、LAN 和 MQTT 上报。

通信状态

const unsubscribeStatus = device.bleCapability.subscribeStatus().subscribe((status): void => {
  // 在 ONLINE_CONTROLLABLE 后允许控制。
});

MQTT 绑定事件

const unsubscribeMqttBinding = GizMqttManager.subscribeBindingEvents().subscribe((event): void => {
  if (event !== undefined) {
    // event.deviceId / event.isBound
  }
});

subscribeBindEvent() 是同一个状态流的兼容命名。

GizState.getValue 与 subscribe

const currentStatus = device.bleCapability.subscribeStatus().getValue();
const unsubscribe = device.subscribeBoundState().subscribe((isBound: boolean): void => {
  // 订阅时默认立即获得当前值。
});

在 ArkUI 组件的 aboutToDisappear() 或 Ability 销毁时调用所有取消函数。调用方不要使用 setValue() 修改 SDK 内部状态。