Я пытаюсь получить тот момент, когда пользователь подключается к сети, тогда я подумал, что BroadcastReceiver
- хороший подход... То, что я хотел бы сделать, - это когда пользователь подключается к сети, знаю, эта сеть имеет подключение к Интернету.
Главное знать, требуется ли WiFi для 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?
- Android WIFI Как обнаружить, когда доступно конкретное соединение WIFI
- BroadcastReceiver не работает (обнаруживает, подключен ли Wi-Fi)
И еще... но, к сожалению, я не нашел для меня правильного ответа.
TL; DR
То, что я пытаюсь сделать, это получить точное событие, которое пользователи подключают к сети, а затем получить хороший метод для обнаружения, могу ли я сделать ping Google или проверить, есть ли соединение с Интернетом (ТОЛЬКО С WIFI, ПОДКЛЮЧЕНИЕ 3G НЕ РАЗРЕШАЕТСЯ), потому что код, который я использую в данный момент, иногда не работает...
Я думаю, что это хороший метод, чтобы узнать, есть ли Internet Connection
, поскольку вещь, которую я хочу знать, определяет, требуется ли Wifi для входа в браузер.
Мы почти закончили... Но я не понимаю, почему вступает в BroadcastReceiver
4 раза или даже 5.... и иногда говорит, что там Internet Connection
, когда нет...