Я пытаюсь получить момент, когда пользователь подключается к сети, тогда я подумал, что BroadcastReceiver
- хороший подход... Я хотел бы сделать так, чтобы когда пользователь подключается к сети, знал, есть ли у этой сети подключение к Интернет.
Главное также знать, требуется ли Wi-Fi Browse Log in
Пример: Handling Network Sign-On
документация
Что я пробовал до сих пор?
Я поменял свой BroadcastReceiver
на этот
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) {
Log.d("Network", "Internet YAY");
} else if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.DISCONNECTED) {
if (isNetworkOnline()) {
Log.d(TAG, String.valueOf(tikis));
NetTask TeInternet = new NetTask();
TeInternet.execute("https://www.google.com");
}
}
Проблема в том, что когда я пытаюсь подключиться к WiFi
без Internet Connection
, ввод такой:
D/Network﹕ Internet YAY
D/Network﹕ Internet YAY
D/Network﹕ Internet YAY
D/RequiresLoginBroadcast﹕ 1 //this occurs sometimes
Я изменил Inner Class
на это в соответствии с Handling Network Sign-On
документация
doInBackground()
метод:
protected Boolean doInBackground(String...params) {
boolean internetAccessExists = false;
String urlToBeAccessed = params[0];
final int TIMEOUT_VALUE_IN_MILLISECONDS = 15000;
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urlToBeAccessed);
urlConnection = (HttpURLConnection) url.openConnection();
//set the respective timeouts for the connection
urlConnection.setConnectTimeout(TIMEOUT_VALUE_IN_MILLISECONDS);
urlConnection.setReadTimeout(TIMEOUT_VALUE_IN_MILLISECONDS);
//the redirect check is valid only after the response headers have been received
//this is triggered by the getInputStream() method
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
if (!url.getHost().equals(urlConnection.getURL().getHost())) {
internetAccessExists = true;
}
}
//any sort of exception is considered as a redirect.
//more specific exceptions such as SocketTimeOutException and IOException can be handled as well
catch (Exception e) {
Log.d(TAG, e.toString());
} finally {
Log.d(TAG, "Finally");
urlConnection.disconnect();
}
return internetAccessExists;
Что я искал до сих пор?
- Как определить, когда WIFI-соединение было установлено в Андроид?
- Android WIFI Как определить, когда конкретное соединение WIFI Доступно
- BroadcastReceiver не работает (определить, подключен ли Wi-Fi)
И еще ... но, к сожалению, я не нашел правильного ответа для себя.
TL;DR
То, что я пытаюсь сделать, это получить точное событие, когда пользователи подключаются к сети, а затем получить хороший метод, чтобы определить, могу ли я выполнить пинг Google или проверить, есть ли подключение к Интернету (ТОЛЬКО С WIFI, 3G ПОДКЛЮЧЕНИЕ ЗАПРЕЩЕНО), потому что код, который я использую в данный момент, иногда дает сбой...
Я думаю, что это хороший способ узнать, есть ли Internet Connection
, поскольку я хочу узнать, требует ли Wi-Fi вход в браузер.
Мы почти закончили... Но я не понимаю, почему я захожу на BroadcastReceiver
4 или даже 5 раз.... и иногда говорю, что есть Internet connection
, когда его нет...
wifi
илиinternet
? - person Darpan   schedule 29.07.2015