鸿蒙手机WLAN Hotspot个人热点状态研究

发布时间 2023-09-24 22:58:31作者: Liu Siyuan

鸿蒙设备需要注册事件监听,来获取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 的有效方法。