我计划制作一个应用程序来检查某个wifi网络是否使用通用密码。我有一个最常见的密码列表,但以下功能:
public boolean connectTo(String psKey){
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\"" + dbw.getSsid() + "\"";
wc.preSharedKey = "\"" + psKey + "\"";
wc.status = WifiConfiguration.Status.ENABLED;
wc = configureCapabs(wc, dbw.getCapability());
int res = wifi.addNetwork(wc);
Toast.makeText(this, "add Network returned " + res , Toast.LENGTH_SHORT).show();
boolean b = wifi.enableNetwork(res, true);
Toast.makeText(this, "enableNetwork returned " + b , Toast.LENGTH_SHORT).show();
if(!b) return false;
boolean fin = /*b ? wifi.reassociate() : */wifi.reconnect();
return fin;
}
即使密码不正确,也会返回true。有没有办法检查我尝试登录的密码是否被接受或拒绝?
答案 0 :(得分:3)
您正在使用reconnect()
的{{1}} / reassociate()
方法检查连接是否成功,但是它们返回的布尔值意味着其他内容。返回值仅告诉您有关启动给定操作的结果。这是因为关联和连接到WiFi网络需要时间。然而,这些方法将立即返回,不会阻止。连接或关联网络的实际任务是在后台异步完成的。
您可以通过收听特定的系统广播来监控WiFi连接发生的情况:
WiFiManager
您可以找到有关此HERE的更多信息 - 请查看Torsten的答案。
答案 1 :(得分:0)
至于通过返回值检查密码是被接受还是被拒绝,我实际上并不知道我可以想到两种可能的替代策略可能会产生相同的结果吗?
不是100%肯定,因为我之前没有这样做,但是我想知道Pinging请求者是否有效?
http://developer.android.com/reference/android/net/wifi/WifiManager.html#pingSupplicant()
要么就是现在检查你是否有IP地址?
http://developer.android.com/reference/android/net/wifi/WifiInfo.html