Как определить, когда пользователь подключен к общедоступному Wi-Fi, НО не утвержден срок использования Wi-Fi
Мое приложение должно работать на рабочих местах / в аэропортах, где есть бесплатная общественная сеть Wi-Fi.
Я хотел бы проинформировать пользователя, когда ему нужно утвердить условия использования Wi-Fi через веб-браузер.
Я пытался извлечь информацию, но не нашел никаких атрибутов / информации, чтобы изолировать это дело
public static void haveNetworkConnection(Context mContext) {
ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) { // connected to the internet
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
// connected to wifi
Toast.makeText(mContext, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show();
printWifiInformation(activeNetwork);
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
// connected to the mobile provider's data plan
Toast.makeText(mContext, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(mContext, "Not connected", Toast.LENGTH_SHORT).show();
}
}
public static void printWifiInformation(NetworkInfo activeNetwork){
System.out.println("************************************************************************************");
System.out.println("1 . describeContents " + activeNetwork.describeContents());
System.out.println("2 . getDetailedState " + activeNetwork.getDetailedState());
System.out.println("3 . getExtraInfo " + activeNetwork.getExtraInfo());
System.out.println("4 . getReason " + activeNetwork.getReason());
System.out.println("5 . getState " + activeNetwork.getState());
System.out.println("6 . getSubtype " + activeNetwork.getSubtype());
System.out.println("7 . getSubtypeName " + activeNetwork.getSubtypeName());
System.out.println("8 . getSubtypeName " + activeNetwork.getSubtypeName());
System.out.println("9 . getType " + activeNetwork.getType());
System.out.println("10. getTypeName " + activeNetwork.getTypeName());
System.out.println("11. isAvailable " + activeNetwork.isAvailable());
System.out.println("12. isConnected " + activeNetwork.isConnected());
System.out.println("13. isConnectedOrConnecting " + activeNetwork.isConnectedOrConnecting());
System.out.println("14. isFailover " + activeNetwork.isFailover());
System.out.println("15. isRoaming " + activeNetwork.isRoaming());
System.out.println("************************************************************************************");
}
Я получил тот же результат, когда проверил до и после нажатия веб-браузера. Пожалуйста, сообщите, спасибо, Лютер
1 ответ
Вы должны начать с проверки подключения, чтобы убедиться, что вы находитесь внутри огороженного сада Captive Portal.
Это довольно хорошее объяснение этого здесь, на SO.
Тем не менее, это не дает вам информацию о самом портале.
Так что вам придется вручную обрабатывать HttpUrlConnection
Заголовки ответа и ищите редирект
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
if (!url.getHost().equals(urlConnection.getURL().getHost())) {
// we were redirected! Kick the user out to the browser to sign on?
}
...
} finally {
urlConnection.disconnect();
}
Официальная документация достаточно велика, чтобы предоставить ряд примеров, которые включают в себя обработку входа в сеть, аутентификацию Http, а также обработку файлов cookie. Вы должны взглянуть на это. Надеюсь это поможет!