Wifi密码错误
需求: wifi密码错误、弹出提示
在网上找了半天大部分都是以下方式实现的
public class NetworkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
SupplicantState supState = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
if (supState == SupplicantState.DISCONNECTED) {
int error = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1);
if (error == WifiManager.ERROR_AUTHENTICATING) {
Toast.makeText(context, "WiFi密码错误", Toast.LENGTH_SHORT).show();
}
}
}
}
}
经测试验证非密码错误也会走到里面
参考博客Android Q 学习WiFi AP的禁用后找了WifiConfiguration源码查看 WifiConfiguration Status
/** Possible status of a network configuration. */
472 public static class Status {
473 private Status() { }
474
475 /** this is the network we are currently connected to */
476 public static final int CURRENT = 0;
477 /** supplicant will not attempt to use this network */
478 public static final int DISABLED = 1;
479 /** supplicant will consider this network available for association */
480 public static final int ENABLED = 2;
481
482 public static final String[] strings = { "current", "disabled", "enabled" };
483 }
484
解决方式:在收到对应广播后判断下status
val wifi = WiFiUtil.getInstance(wifiManager).everConnected(wifiName)
if (wifi.status != WifiConfiguration.Status.DISABLED) {
// 如果WifiConfiguration.Status.DISABLED说明没连接上过
LogUtil.d("everConnected.status != WifiConfiguration.Status.DISABLED")
return
}
工具方法
public WifiConfiguration everConnected(String ssid) {
List<WifiConfiguration> existingConfigs = mWifiManager.getConfiguredNetworks();
if (existingConfigs == null || existingConfigs.isEmpty()) {
return null;
}
ssid = "\"" + ssid + "\"";
for (WifiConfiguration existingConfig : existingConfigs) {
if (existingConfig.SSID.equals(ssid)) {
return existingConfig;
}
}
return null;
}

浙公网安备 33010602011771号