问题描述: 在一个 android 项目中 需要 开发 类似于 系统 wifi 连接的功能,选择可用 wifi 后,输入正确的密码后,WifiManager.SUPPLICANT_STATE_CHANGED_ACTION 中的 WifiManager.ERROR_AUTHENTICATING 密码错误广播 偶尔也会收到监听,文章最后已有解决方案 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210320154723101.png)
先看看 wifi 功能开发的常规流程
1、注意 wifi状态的监听
private void regiterWifiBroadcast() {
wifiReceiver = new WifiBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);//监听wifi是开关变化的状态
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);//监听wifi连接状态广播,是否连接了一个有效路由
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);//监听wifi列表变化(开启一个热点或者关闭一个热点)
filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); //监听密码
registerReceiver(wifiReceiver, filter);
}
2、创建 wifi 监听的广播
//获取WifiManager
WifiManager wifiManager = (WifiManager)Context.getSystemService(Context.WIFI_SERVICE);
public class WifiBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())){
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
switch (state){
/**
* WIFI_STATE_DISABLED WLAN已经关闭
* WIFI_STATE_DISABLING WLAN正在关闭
* WIFI_STATE_ENABLED WLAN已经打开
* WIFI_STATE_ENABLING WLAN正在打开
* WIFI_STATE_UNKNOWN 未知
*/
case WifiManager.WIFI_STATE_DISABLED:{
Log.e(TAG,"wifi已经关闭");
break;
}
case WifiManager.WIFI_STATE_DISABLING:{
Log.e(TAG,"wifi正在关闭");
break;
}
case WifiManager.WIFI_STATE_ENABLED:{
Log.e(TAG,"wifi已经打开");
connectType = -1;
wifiManager.startScan();
break;
}
case WifiManager.WIFI_STATE_ENABLING:{
Log.e(TAG,"wifi正在打开");
break;
}
case WifiManager.WIFI_STATE_UNKNOWN:{
Log.e(TAG,"wifi未知状态");
break;
}
}
}else if(WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())){
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
Log.e(TAG, "--网络状态--" + info.toString());
if(NetworkInfo.State.DISCONNECTED == info.getState()){//wifi没连接上
Log.e(TAG,"wifi没连接上,已断开");
if(connectType!=0) {
connectType = 0;
for (int i = 0; i |