Аутентификация Android заходит в тупик при использовании EAP с PEAP - PullRequest
2 голосов
/ 19 февраля 2011

Я провел несколько дней, пытаясь выяснить, что не так с Wi-Fi моего Android-телефона в школе. Школа Wi-Fi является 802.1x EAP с использованием PEAP. Требуется имя пользователя, пароль.

У меня было два телефона Android, и я запустил много разных ПЗУ, поэтому я знаю, что это не просто проблема, связанная с ПЗУ. В настоящее время я использую 2.2.1 на крыле Mytouch 3g ed. У меня нет тарифного плана с моим телефоном, поэтому я держу данные отключенными. Я использую только Wi-Fi.

У меня проблема в том, что после того, как я подключился к Wi-Fi, какое-то время все в порядке, но вскоре (возможно, через 15 минут или час) я включу свой телефон, и когда я увижу соединение Wi-Fi, он говорит аутентификацию и остается там до тех пор, пока я не сброслю его. Если я пытаюсь путешествовать по Интернету с обычным HTTP, он работает нормально, но если я пытаюсь запустить любые приложения, требующие Wi-Fi-соединения, они выдают ошибку, сообщающую, что есть сетевое соединение (например, поиск в Google Voice, который скажет «Проблема с подключением» «). Каналы не могут обновляться, gmail не обновляется и т. Д. После сброса соединения Wi-Fi снова работает отлично. Я не уверен, почему это происходит. Я думаю, это как-то связано с настройкой Wi-Fi в школе.

Однако, чтобы быстро решить проблему, я пишу приложение, которое проверит, аутентифицирует ли соединение, и повторно свяжет соединение, если оно есть. Хотя у меня проблемы.

Вот код для проверки подлинности Wi-Fi, а также некоторые выходные данные отладки:

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

Вывод журнала одинаков, независимо от того, говорит ли Wi-Fi на телефоне «Подключен» или «Аутентификация», что означает, что моя программа на данный момент не может различить, находится ли она в «фанки» состоянии «аутентификации» или нет. Мне нужно уметь различать, чтобы знать, когда нужно сбросить Wi-Fi. Любая помощь с благодарностью.

1 Ответ

1 голос
/ 08 ноября 2011

Попробуйте это.

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 / МОЙ МЕНЕДЖЕР СОЕДИНЕНИЯ: 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

4-й выход (если вы ввели неверный пароль и не смогли подключиться).

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

// надеюсь, это поможет

...