WIFI密码输入监听事件

简介

在做自定义wifi列表时,需要用到广播监听wifi密码是否输入错误

注意

需要在回调之后忘记该wifi,不然会出现收到多次密码错误的回调,这是wifi连接设置了重连机制反复连接导致的

使用

注册广播事件

private void initBroadcast() {
    IntentFilter intentFilter=new IntentFilter();
    intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); //监听密码
    networkBroadcast=new NetworkConnectChangedReceiver();
    registerReceiver(networkBroadcast,intentFilter);
}

添加广播

class NetworkConnectChangedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() == null) {
            return;
        }
        switch (intent.getAction()) {
            case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION:
                int error = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1);
                if (error == WifiManager.ERROR_AUTHENTICATING) {
                WifiManager wifiManager = (WifiManager) getContext().getSystemService(WIFI_SERVICE);
                    forgetWifiNetWork(wifiManager.getConnectionInfo().getSSID());//连接失败后需要忘记密码,不然会因为重连机制导致反复广播
                }
                break;
        }
    }}


//忘记密码
//需要注意WifiConfiguration中获取的SSID添加了双引号,所以进行比对时也要加上
public boolean forgetWifiNetWork(String SSID) {
    WifiManager wifiManager = (WifiManager) getContext().getSystemService(WIFI_SERVICE);
    List<WifiConfiguration> config = wifiManager.getConfiguredNetworks();
    if (!SSID.contains("\"")) {
        SSID = "\"" + SSID + "\"";
    }
    if (config == null) {
        LogUtil.d("无wifi信息");
        return false;
    } else {
        boolean remove = false;
        for(int i = 0; i < config.size(); ++i) {
            if (SSID.equals(config.get(i).SSID)) {
                remove = wifiManager.removeNetwork(config.get(i).networkId);
                break;
            }
        }
        boolean save = wifiManager.saveConfiguration();
        return remove && save;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值