将EAP与PEAP一起使用时,Android身份验证会陷入死锁

时间:2011-02-19 19:39:21

标签: android authentication android-wifi

我花了几天时间试图弄清楚我的Android手机在学校的wifi出了什么问题。学校的wifi是使用PEAP的802.1x EAP ..需要用户名,密码。

我有两部Android手机,并且已经运行了很多不同的ROM,所以我知道这不仅仅是ROM特有的问题。我目前在Mytouch 3g挡泥板上运行2.2.1。我的手机没有数据计划,因此我保留了数据。我只使用wifi。

我遇到的问题是,在连接到wifi后,一切都很好,但很快(大约15分钟到一个小时后),我会打开手机,当我看到wifi连接时,它说Authenticating并且它一直停留在那里直到我重置它。如果我尝试使用普通的HTTP上网冲浪它工作正常,但如果我尝试运行任何需要wifi连接的应用程序,他们会给出一个错误,说有网络连接(例如Google Voice搜索会说“连接问题” “)。 Feed无法更新,gmail无法更新等。重置连接后,wifi再次完美运行。我不确定为什么会这样。我认为这与学校的无线网络设置有关。

为了快速解决问题,我正在编写一个应用程序来测试连接是否正在验证并重新关联连接(如果是)。我遇到了问题。

以下是查看wifi是否正在验证以及某些调试输出的代码:

private void checkWifi() {

    WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    WifiInfo info = wifi.getConnectionInfo();

    SupplicantState state = info.getSupplicantState();
    Log.d(getClass().getSimpleName(), state.toString());

    NetworkInfo.DetailedState state2 = WifiInfo.getDetailedStateOf(info.getSupplicantState());
    Log.d(getClass().getSimpleName(), state2.toString());
}

这是日志输出:

D/WifiCheckerService(24732): COMPLETED
D/WifiCheckerService(24732): OBTAINING_IPADDR

无论手机上的wifi是否显示已连接或验证,日志输出都是相同的,这意味着我现在的程序无法区分它是否处于时髦的“身份验证”状态。我需要能够区分,以便能够知道何时重置wifi。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

试试这个。

ConnectivityManager conn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo nInfo = conn.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

Log.d("MY CONNECTIVITY MANAGER: NETWORK.DETAILEDSTATE", nInfo.getDetailedState().toString());

Log.d("MY CONNECTIVITY MANAGER: NETWORK.STATE", nInfo.getState().toString());

这是我的输出(如果您在连接时输入了错误的密码)。

  

D / MY CONNECTIVITY MANAGER:NETWORK.DETAILEDSTATE(24732):   认证D / MY CONNECTIVITY MANAGER:NETWORK.STATE(24732):   CONNECTING

第二次输出(获取IP时)。

D/MY CONNECTIVITY MANAGER: NETWORK.DETAILEDSTATE(24732): OBTAINING_IPADDR
D/MY CONNECTIVITY MANAGER: NETWORK.STATE(24732): CONNECTED

第三次输出(成功连接)。

D/MY CONNECTIVITY MANAGER: NETWORK.DETAILEDSTATE(24732): CONNECTED
D/MY CONNECTIVITY MANAGER: NETWORK.STATE(24732): CONNECTED

第4次输出(如果输入的密码错误且无法连接)。

D/MY CONNECTIVITY MANAGER: NETWORK.DETAILEDSTATE(24732): DISCONNECTED
D/MY CONNECTIVITY MANAGER: NETWORK.STATE(24732): DISCONNECTED

第五输出(如果WIFI空闲且断开连接)。

D/MY CONNECTIVITY MANAGER: NETWORK.DETAILEDSTATE(24732): IDLE
D/MY CONNECTIVITY MANAGER: NETWORK.STATE(24732): DISCONNECTED

//希望它有所帮助