Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Как постоянно проверять имеется ли подключение к интернету?

#android


К примеру включили интернет, вывелось соответствующее сообщение, потом отключили
его и опять получили соответствующее сообщение.

Те мониторить состояние интернета в любой момент времени, а не единоразово
    


Ответы

Ответ 1



Вам нужно не мониторить состояние интернета, а получать уведомления о его изменении Определение состояния подключения в момент времени: boolean checkInternet(Context context) { ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return activeNetwork.isConnectedOrConnecting(); } BroadcastReceiver на изменение состояния сети: public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { if(checkInternet(context)){ Toast.makeText(context, "Network Available Do operations",Toast.LENGTH_LONG).show(); } } И в манифесте определить сам ресивер: И обязательно пермишен на получение состояния сети:

Ответ 2



Получаем ConnectivityManager и выбираем какие броадкасты будем слушать: connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); intentFilter = new IntentFilter(); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); BroadcastReceiver connectivityStatusReceiver = new NetworkConnectionStatusReceiver(); Когда нужно начать мониторить состояние интернета запускаем прослушку соответствующих интентов: context.registerReceiver(connectivityStatusReceiver, NETWORK_INTENT_FILTER)) Ну и собсно проверяем наличие интернета: protected boolean hasConnection() { NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnected()) { switch (netInfo.getType()) { case ConnectivityManager.TYPE_MOBILE: case ConnectivityManager.TYPE_WIFI: case ConnectivityManager.TYPE_WIMAX: return true; default: return false; } } return false; } private class NetworkConnectionStatusReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (hasConnection()) { // network available } else { // no network }; } }

Комментариев нет:

Отправить комментарий