检测何时 WiFi网络无法进行身份验证

我正在尝试使用WiFiManager连接到 WiFi 网络。这是我用来这样做的代码:

我正在尝试使用WiFiManager连接到 WiFi 网络。这是我用来这样做的代码:

WifiManager manager = [...];
WifiConfiguration config = new WifiConfiguration();
manager.setWifiEnabled(true);
//Set SSID, PSK, etc...
[...]
//Connect to the network
int netId = manager.addNetwork(config);
if (netId == -1)
{
    Toast.makeText(this, "Invalid PSK", Toast.LENGTH_LONG).show();
    return;
}
manager.enableNetwork(netId, true);
manager.saveConfiguration();

事先,我为WifiManager.NETWORK_STATE_CHANGED_ACTION操作注册了一个BroadcastReceiver。我试图通过检查给定NetworkInfoDetailedState来检测连接何时成功或失败(出于各种原因,包括身份验证)。

当连接成功时,一切正常,但是由于某种原因,当连接失败时,我的接收器不会“执行”。网络被添加到设备的列表中,我可以通过进入 WiFi 设置来看到它,但它不会尝试连接(或者它尝试连接但不通知我的接收器)。

有线索吗?谢谢!

3

我终于实现了我想要的。

要检测连接是否成功,请注册WifiManager.NETWORK_STATE_CHANGED_ACTION广播意图并检查NetworkInfo.DetailedState.OBTAINING_IPADDR详细状态(显然是 WiFi)。

要检测连接失败,请注册WifiManager.SUPPLICANT_STATE_CHANGED_ACTION广播意图并检查任何WifiManager.EXTRA_SUPPLICANT_ERROR整数额外(通常为WifiManager.ERROR_AUTHENTICATING)。您可能需要获得 Android 隐藏 API 的访问权限才能实现这一点。

1

如果连接状态为成功,则 enableNetwork 方法返回 true。这在成功时工作正常,但不是检查失败状态的最佳方法(如果在第一步身份验证后连接失败,则返回 true)。

我认为你可以检查 networkInfo 对象实际连接的网络,看看请求是否确定:

ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(532)
如何在WhatsApp状态中设置(Apple徽标 )
上一篇
IIS-403禁止:访问通过IIS7.0发布的文件夹时拒绝访问
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(42条)