4

我计划制作一个应用程序来检查某个 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。有没有办法检查我尝试登录的密码是被接受还是被拒绝?

4

2 回答 2

5

您正在使用reconnect()/reassociate()方法WiFiManager来检查天气或连接是否成功,但它们返回的布尔值意味着别的东西。返回的值仅告诉您 STARTING 给定操作的结果。这是因为关联和连接到 WiFi 网络需要时间。然而,这些方法将立即返回并且不会阻塞。连接或关联网络的实际任务在后台异步完成。

您可以通过收听特定系统范围的广播来监控 WiFi 连接发生的情况:

<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>

您可以在此处找到有关此的更多信息- 检查 Torsten 的答案。

于 2012-09-08T21:10:22.983 回答
0

至于通过返回值检查密码是被接受还是被拒绝,我实际上并不知道,但是我能想到两种可能获得相同结果的“可能”替代策略吗?

不是 100% 确定,因为我以前没有这样做过,但是我想知道 Ping 请求者是否会起作用?

http://developer.android.com/reference/android/net/wifi/WifiManager.html#pingSupplicant ()

或者检查你现在是否有IP地址?

http://developer.android.com/reference/android/net/wifi/WifiInfo.html

于 2012-09-08T21:04:34.787 回答