鸿蒙设备需要注册事件监听,来获取WLAN状态 (权限申请不可少 "ohos.permission.GET_WIFI_INFO","ohos.permission.GET_WIFI_CONFIG")
private void subscriberWlanEvent() { // 注册消息 // 增加获取WLAN状态变化消息 MatchingSkills match = new MatchingSkills(); match.addEvent(WifiEvents.EVENT_ACTIVE_STATE); match.addEvent(WifiEvents.EVENT_HOTSPOT_STATE); match.addEvent("android.net.wifi.WIFI_AP_STATE_CHANGED"); CommonEventSubscribeInfo subscribeInfo = new CommonEventSubscribeInfo(match); subscribeInfo.setPriority(100); mWlanEventSubscriber = new WlanEventSubscriber(subscribeInfo); try { CommonEventManager.subscribeCommonEvent(mWlanEventSubscriber); } catch (RemoteException e) { e.printStackTrace(); LogUtil.info(TAG, "subscribe in wifi events failed!"); } }
页面结束时注意解除注册
try {
if (mWlanEventSubscriber != null) {
CommonEventManager.unsubscribeCommonEvent(mWlanEventSubscriber);
mWlanEventSubscriber = null;
}
} catch (RemoteException e) {
throw new RuntimeException(e);
}
监听
private class WlanEventSubscriber extends CommonEventSubscriber { private final int WIFI_AP_STATE_DISABLING = 10; private final int WIFI_AP_STATE_DISABLED = 11; private final int WIFI_AP_STATE_ENABLING = 12; private final int WIFI_AP_STATE_FAILED = 14; WlanEventSubscriber(CommonEventSubscribeInfo info) { super(info); } @Override public void onReceiveEvent(CommonEventData commonEventData) { if (commonEventData == null || commonEventData.getIntent() == null) { return; } String message = ""; LogUtil.info(TAG, "Receive Action: " + commonEventData.getIntent().getAction()); if (WifiEvents.EVENT_ACTIVE_STATE.equals(commonEventData.getIntent().getAction())) { // 获取附带参数 IntentParams params = commonEventData.getIntent().getParams(); if (params == null) { return; } LogUtil.info(TAG, "收到参数:WIFI_AP_INTERFACE_NAME=" + commonEventData.getIntent().getStringParam("android.net.wifi.extra.WIFI_AP_INTERFACE_NAME")); // wlan0 LogUtil.info(TAG, "收到参数:WIFI_AP_MODE=" + commonEventData.getIntent().getIntParam("android.net.wifi.extra.WIFI_AP_MODE", 0)); // 1 LogUtil.info(TAG, "收到参数:previous_wifi_state=" + commonEventData.getIntent().getIntParam("previous_wifi_state", 0)); // 13,10,1,2 LogUtil.info(TAG, "收到参数:wifi_state=" + commonEventData.getIntent().getIntParam("wifi_state", 0)); // 10,11,2,3 if(!params.hasParam(WifiEvents.PARAM_ACTIVE_STATE)) { // LogUtil.info(TAG, "没有 WifiEvents.PARAM_ACTIVE_STATE "); return; } int wifiState= (int) params.getParam(WifiEvents.PARAM_ACTIVE_STATE); if (wifiState== WifiEvents.STATE_ACTIVE) { // 处理WLAN被打开消息 LogUtil.info(TAG, "STATE_ACTIVE " + wifiState); } else if (wifiState == WifiEvents.STATE_ACTIVATING) { // 处理WLAN被关闭消息 LogUtil.info(TAG, "STATE_ACTIVATING " + wifiState); } else if (wifiState == WifiEvents.STATE_INACTIVE) { // 处理WLAN被关闭消息 LogUtil.info(TAG, "STATE_INACTIVE " + wifiState); } else if (wifiState == WifiEvents.STATE_CONNECTED) { // 处理WLAN被关闭消息 LogUtil.info(TAG, "STATE_CONNECTED " + wifiState); } else if (wifiState == WifiEvents.STATE_DEACTIVATING) { // 处理WLAN被关闭消息 LogUtil.info(TAG, "STATE_DEACTIVATING " + wifiState); } else if (wifiState == WifiEvents.STATE_DISCONNECTED) { // 处理WLAN被关闭消息 LogUtil.info(TAG, "STATE_DISCONNECTED " + wifiState); } else { // 处理WLAN异常状态 LogUtil.info(TAG, "Unknown wifi state"); message += "Unknown wifi state "; } } if (WifiEvents.EVENT_HOTSPOT_STATE.equals(commonEventData.getIntent().getAction())) { // 获取附带参数 IntentParams params = commonEventData.getIntent().getParams(); if (params == null) { return; } LogUtil.info(TAG, "收到参数:WIFI_AP_INTERFACE_NAME=" + commonEventData.getIntent().getStringParam("android.net.wifi.extra.WIFI_AP_INTERFACE_NAME")); LogUtil.info(TAG, "收到参数:WIFI_AP_MODE=" + commonEventData.getIntent().getIntParam("android.net.wifi.extra.WIFI_AP_MODE", 0)); LogUtil.info(TAG, "收到参数:previous_wifi_state=" + commonEventData.getIntent().getIntParam("previous_wifi_state", 0)); LogUtil.info(TAG, "收到参数:wifi_state=" + commonEventData.getIntent().getIntParam("wifi_state", 0)); if(!params.hasParam(WifiEvents.PARAM_HOTSPOT_STATE)) { return; } int wifiState= (int) params.getParam(WifiEvents.PARAM_HOTSPOT_STATE); if (wifiState== WifiEvents.STATE_HOTSPOT_ACTIVATING) { // 处理WLAN被打开消息 LogUtil.info(TAG, "Receive 开始打开热点 " + wifiState); message += "Receive WifiEvents.STATE_ACTIVE " + wifiState; } else if (wifiState == WifiEvents.STATE_HOTSPOT_ACTIVE) { // 处理WLAN被关闭消息 LogUtil.error(TAG, "Receive 热点已开 " + wifiState); message += "Receive WifiEvents.STATE_INACTIVE " + wifiState; } else if (wifiState == WifiEvents.STATE_HOTSPOT_DEACTIVATING) { // 处理WLAN被关闭消息 LogUtil.info(TAG, "Receive 开始关闭热点 " + wifiState); message += "Receive WifiEvents.STATE_INACTIVE " + wifiState; } else if (wifiState == WifiEvents.STATE_HOTSPOT_INACTIVE) { // 处理WLAN被关闭消息 LogUtil.info(TAG, "Receive 热点关闭 " + wifiState); message += "Receive WifiEvents.STATE_INACTIVE " + wifiState; } else { // 处理WLAN异常状态 LogUtil.info(TAG, "Unknown wifi state"); message += "Unknown wifi state "; } } mText.setText("isWifiActive = " + message); } }
验证手机一 :HUAWEI ABR-AL80 (P50)鸿蒙4.0
测试数据1(流量开启、WLAN关闭,打开个人热点):
测试数据2(流量开启、WLAN关闭,关闭个人热点):
测试数据3(流量开启、WLAN开启,开启个人热点):无反应
测试数据4(流量开启、WLAN开启,关闭个人热点):无反应
验证手机二 :HUAWEI VOG-AL00 (P30 Pro)鸿蒙3.0
测试数据1(WLAN关闭,打开个人热点):
测试数据2(WLAN关闭,关闭个人热点):
测试数据3(WLAN开启,开启个人热点):无反应
测试数据4(WLAN开启,关闭个人热点):无反应
验证手机三 模拟器
测试数据1(流量开启、WLAN开启,开启个人热点,WLAN自动关闭)
测试数据2 鸿蒙3.1 (流量开启、WLAN开启,关闭个人热点,WLAN自动开启)
测试数据3 鸿蒙3.1 (流量开启、WLAN关闭,开启个人热点,WLAN不影响)
测试数据4 鸿蒙3.1 (流量开启、WLAN关闭,关闭个人热点,WLAN不影响)
总结:双网卡设备暂未得到监听WLAN Hotspot 的有效方法。