监听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_STATEconst subscribeInfo = {events: [CommonConstants.CONN_STATE]};//创建订阅者CommonEventManager.createSubscriber(subscribeInfo, (err, subscriber) => {if (err) {toastMsg = $r('app.string.subscribe_fail');//创建订阅失败:执行回调,刷新相关UIcallback(commonEvent, toastMsg);return;}// 创建订阅者失败:执行回调,刷新相关UIif (subscriber === null) {toastMsg = $r('app.string.need_subscriber');callback(commonEvent, toastMsg);return;}//保存订阅者,用来后面的注销操作commonEvent.subscriber = subscriber;//通过订阅者subscriber 执行订阅 //订阅回调函数返回的data内包含了公共事件的名称、发布者携带的数据等信息CommonEventManager.subscribe(subscriber, (err, data) => {if (err) {//订阅失败:执行回调,刷新相关UItoastMsg = $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;}//执行回调,刷新相关UIcallback(commonEvent);})toastMsg = $r('app.string.subscribe_success');//执行回调,刷新相关UIcallback(commonEvent, toastMsg);})}
参考资料:
系统公共事件(ArkTS)
动态订阅公共事件
源码地址