将 EAP 与 PEAP 结合使用时,Android 身份验证会陷入僵局

标签 android authentication android-wifi

我花了好几天时间试图找出我的安卓手机在学校的 wifi 出了什么问题。学校 wifi 是使用 PEAP 的 802.1x EAP。需要用户名和密码。

我有两部 Android 手机,并且在它们上面运行了许多不同的 ROM,所以我知道这不仅仅是 ROM 特定的问题。我目前在 Mytouch 3g fender ed 上运行 2.2.1。我的手机没有数据计划,所以我关闭了数据。我只使用 wifi。

我遇到的问题是,在我连接到 wifi 后,有一段时间一切正常,但很快(可能 15 分钟到一个小时后),我会打开手机,当我看到 wifi 连接时,它说 Authenticating 并且一直卡在那里直到我重置它。如果我尝试使用普通 HTTP 上网,它工作正常,但如果我尝试运行任何需要 wifi 连接的应用程序,他们会给出一个错误,说有网络连接(例如谷歌语音搜索会说“连接问题”)。 Feeds 无法更新,gmail 无法更新等。重置连接后,wifi 再次正常工作。我不确定为什么会这样。我认为这与学校的 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。非常感谢任何帮助。

最佳答案

试试这个。

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): AUTHENTICATING 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

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

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

第 5 个输出(如果 WIFI 处于空闲状态且已断开连接)。

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

//希望对你有帮助

关于将 EAP 与 PEAP 结合使用时,Android 身份验证会陷入僵局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053068/

相关文章:

android - Google 登录 - 尝试访问用户信息时出现 401 错误 "Login Required"

java - 如何使用 Jsoup 从标签元素中检索字符串?

java - 重影效应 : Two views on top of each other. 为什么?

android - 项目无法运行

c# - ASP.NET MVC5 : Turn off Windows Authentication on a single page

java - 在 servlet 中保存和检索用户套接字

c# - 如何使用 Xamarin (C#) 在 Android 上启用 Wifi 区域 (Wifi AP)?

android - 在android中创建Wifi热点配置

android - 如何让我的wifi一直开启?

android - 重试异步任务