监听Wifi状态变化
- 前言
- 创建接收状态变化的Bean对象
- 创建订阅者和订阅事件
- 参考资料:
前言
本篇博文通过动态订阅公共事件来说明怎么使用HarmonyOS监听Wifi状态的变化。关于动态订阅公共事件的概念,官网有详细说明,再次就不在赘述。博文相关项目源码地址传送门。公共事件的监听需要通过订阅和注销两步。
创建接收状态变化的Bean对象
该对象主要用来存储Wifi当前的状态,比如是否已经链接、是否断开等。同时该Bean对象还定义了一个subscriber用来保持订阅者,用来执行订阅和注销
export class CommonEventBean {
//省略部分代码
/**
* The state of common events.
*/
state: Resource = $r('app.string.event_init_state');
//保存订阅者对象
subscriber: any = null;
}
创建订阅者和订阅事件
监听Wifi变化,需要先调用CommonEventManager.createSubscriber
创建订阅者,保存返回的订阅者对象subscriber,用于执行后续的订阅、退订等操作。下面看看就看具体怎么来监听Wifi变化的:
/**
@param commonEventItem 保存状态的Bean对象
@
*/
subscribe(commonEventItem: CommonEventBean, callback: Function): void {
let toastMsg: Resource;
let commonEvent = commonEventItem;
//创建需要订阅的事件,此处为CONN_STATE
const subscribeInfo = {
events: [CommonConstants.CONN_STATE]
};
//创建订阅者
CommonEventManager.createSubscriber(subscribeInfo, (err, subscriber) => {
if (err) {
toastMsg = $r('app.string.subscribe_fail');
//创建订阅失败:执行回调,刷新相关UI
callback(commonEvent, toastMsg);
return;
}
// 创建订阅者失败:执行回调,刷新相关UI
if (subscriber === null) {
toastMsg = $r('app.string.need_subscriber');
callback(commonEvent, toastMsg);
return;
}
//保存订阅者,用来后面的注销操作
commonEvent.subscriber = subscriber;
//通过订阅者subscriber 执行订阅
//订阅回调函数返回的data内包含了公共事件的名称、发布者携带的数据等信息
CommonEventManager.subscribe(subscriber, (err, data) => {
if (err) {
//订阅失败:执行回调,刷新相关UI
toastMsg = $r('app.string.subscribe_fail');
callback(commonEvent, toastMsg);
return;
}
let connState: string | undefined = data?.data;
if (connState === undefined) {
return;
}
//变量当前Wifi状态
switch (connState) {
case WifiState.CONNECTING:
commonEvent.state = '连接中';
break;
case WifiState.DISCONNECTED:
commonEvent.state = '已断开';
break;
case WifiState.DISCONNECTING:
commonEvent.state = '正在断开';
break;
case WifiState.UNKNOWN_STATE:
commonEvent.state = '未知状态';
break;
case WifiState.AP_CONNECTED:
commonEvent.state = '已连接';
break;
default:
break;
}
//执行回调,刷新相关UI
callback(commonEvent);
})
toastMsg = $r('app.string.subscribe_success');
//执行回调,刷新相关UI
callback(commonEvent, toastMsg);
})
}
参考资料:
系统公共事件(ArkTS)
动态订阅公共事件
源码地址