简介
在做自定义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;
}
}