Проверить наличие интернета.

Ответить
dcbp
Сообщения: 24
Зарегистрирован: 26 ноя 2012, 10:34

Проверить наличие интернета.

Сообщение dcbp » 08 фев 2013, 13:57

Добрый день, друзья!
Хотелось бы всё же до конца разобраться как проверить есть ли в данный момент интернет.
Функцию определения подключения в общем-то написал:

Код: Выделить всё

public boolean checkNetworkStatus(Context c){

	     final ConnectivityManager connMgr = (ConnectivityManager) c.getSystemService(c.CONNECTIVITY_SERVICE);

	     NetworkInfo nInfo = connMgr.getActiveNetworkInfo();
	     
	     final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
	     final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

	     if( (wifi.isAvailable() || mobile.isAvailable()) && nInfo.isConnected()) return true;
    	 	     
	     return false;
	}
Ошибка возникает когда вайфай например включён, а вот интернета нет. Как бы ещё и этот момент проверить?

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Проверить наличие интернета.

Сообщение Digetix » 08 фев 2013, 15:18

Добрый. Вы проверяете на одновременное включение и вай-фай и интернет? Просто мой Андроид делает так: если включен обычный, то работает с обычным, если включить вай-фай, то работает вай-фай, а обычный не активен.

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Проверить наличие интернета.

Сообщение Finch » 08 фев 2013, 15:34

Он говорил о проблеме когда вай фай подкл а интернета нет, это можна вызвать искуственно выдергиванием кабеля из WAN порта, что мы имеем? Прально вай фай работает и тел подключен но инета нет =) Прога проходит все проверки, но ловит нуллпоинтер при обработке каких-то запросов.
CEO of a company R.id.team

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Проверить наличие интернета.

Сообщение neoksi » 08 фев 2013, 16:05

Finch писал(а):Он говорил о проблеме когда вай фай подкл а интернета нет, это можна вызвать искуственно выдергиванием кабеля из WAN порта, что мы имеем? Прально вай фай работает и тел подключен но инета нет =) Прога проходит все проверки, но ловит нуллпоинтер при обработке каких-то запросов.
Ну почему сразу NullPointer, если правильно запрос реализован, то просто получаем разрыв по таймауту.

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Проверить наличие интернета.

Сообщение Finch » 09 фев 2013, 02:47

Ключевое слово если =)
CEO of a company R.id.team

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Проверить наличие интернета.

Сообщение Mikhail_dev » 09 фев 2013, 09:23

О каком NullPointerException идет речь? Если это сокеты, то IOException,если HTTP, о там код ошибки получим, 400 или 500.
Теперь о том, как всё же решить проблему. Я думаю всё же своими шаманскими решениями, чего я делать не советую. Есть подключение к WiFi ? Значит ставим, что подключены. Не можем делать запросы? Пишем, что неполадки с интернетом. Всё. Это по мне наилучший вариант.
Если хочется танцов с бубнами, то как вариант: при подключении к интернету, делаем к примеру запрос на какой-нибудь сайт. Если есть ответ, то значит мы подключены. Сайт находим с наименьшим контентом ответа, к примеру time-a.timefreq.bldrdoc.gov по 13 порту. Он возвращает точное время по атомным часам. В основном UNIX машины синхронизируются именно по этому времени.

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Проверить наличие интернета.

Сообщение Finch » 10 фев 2013, 05:15

ну как о каком?
Ошибка возникает когда вайфай например включён, а вот интернета нет. Как бы ещё и этот момент проверить?
что из этого следует? Что прога ждет какие-то данные с инета, но их нет и валится в нуллпоинтер. Как-то так.
CEO of a company R.id.team

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Проверить наличие интернета.

Сообщение Mikhail_dev » 10 фев 2013, 15:19

Повторяю. Неправда это. Она свалится в IOException. Вот к примеру вырезка

Код: Выделить всё

				HttpGet httpGet = new HttpGet( url );
			try {
				origResponse = httpClient.execute(httpGet);
			} catch (ClientProtocolException e) {
				Logger.log("HTTPClient.GET", e);
			} catch (IOException e) { ...}

dcbp
Сообщения: 24
Зарегистрирован: 26 ноя 2012, 10:34

Re: Проверить наличие интернета.

Сообщение dcbp » 12 фев 2013, 08:10

Всем спасибо, я решил проблему проверкой на null NetworkInfo

Код: Выделить всё

NetworkInfo nInfo = connMgr.getActiveNetworkInfo();
Ну и условие:

Код: Выделить всё

if( (wifi.isAvailable() || mobile.isAvailable()) && nInfo != null && nInfo.isConnected() ) return true;

Почему так, объяснить не могу, надо много читать наверно, но это хотя бы работает.


Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Проверить наличие интернета.

Сообщение n0tb0dy » 28 май 2014, 16:29

Добрый день а можно вызывать проверку наличия интернет не самому, ну в каком то методе, а так чтобы мой метод срабатывал тогда когда включают или выключают wifi или мобильный инет?

Ну например сделать простое приложение с одной активностью, которая будет выводить в единственный textView что есть подключение по wifi когда включают wifi или есть подключение через mobile inet когда включают мобильный инет.

Может есть где примерчик глянуть? или может тут кто кодик подбросит?

Гуглил я по этому поводу уже много

http://stackoverflow.com/questions/1569 ... ndroid-app

http://stackoverflow.com/questions/1554 ... 7#15546897

это так два примерчика только... но перерыл гораздо большое

все это начинает работать только когда проверка находится в отдельном классе и в отдельном файле, а так чтобы в коде самой Активити, у меня почему то не получилось реализовать

yanchumak
Сообщения: 31
Зарегистрирован: 19 май 2014, 10:50

Re: Проверить наличие интернета.

Сообщение yanchumak » 28 май 2014, 16:48

n0tb0dy писал(а): все это начинает работать только когда проверка находится в отдельном классе и в отдельном файле, а так чтобы в коде самой Активити, у меня почему то не получилось реализовать
Создай ресивер в активити, подпишись на нужные события и всё.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Проверить наличие интернета.

Сообщение n0tb0dy » 28 май 2014, 18:20

yanchumak писал(а): Создай ресивер в активити, подпишись на нужные события и всё.
можно примерчик где-нибудь посмотреть как это сделать?

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: Проверить наличие интернета.

Сообщение Viewer » 28 май 2014, 18:40

В своей Activity определяешь поле
private BroadcastReceiver mBroadcastReceiver;
и метод для запуска BroadcastReceiver:

[syntax=java]private void startWatchingWiFiState (){
if (mBroadcastReceiver!=null)return;
mBroadcastReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub

}
};
//Добавляем фильтр, в фильтр можно добавить еще и другие Action
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(mBroadcastReceiver, filter);
}[/syntax]

Запускаешь где нибудь в onStart и не забыть отменить регистрацию, к примеру, в onStop

[syntax=java] @Override
protected void onStart() {
startWatchingWiFiState ();
}
@Override
protected void onStop() {

if (mBroadcastReceiver != null) {
unregisterReceiver(mBroadcastReceiver);
mBroadcastReceiver = null;
}
}[/syntax]

Естественно в манифесте нужно также прописать нужные разрешения
Последний раз редактировалось Viewer 28 май 2014, 18:42, всего редактировалось 1 раз.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Проверить наличие интернета.

Сообщение n0tb0dy » 28 май 2014, 18:42

все спасибо вроде бы все сам нашел, сейчас работаю с примерчиком...

спасибо за пинок в нужном направлении :)

и за ваш примерчик тоже спасибо, обязательно посмотрю

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: Проверить наличие интернета.

Сообщение Viewer » 28 май 2014, 19:00

Единственное, стоит отметить, что данный приемник регистрирует только возможность подключения к WiFi (т.е. включен ли он в настройках), но не фактическое подключение к Интернету или даже к точке доступа. Все это нужно отлавливать другими Action, к примеру, SUPPLICANT_STATE_CHANGED_ACTION, SUPPLICANT_CONNECTION_CHANGE_ACTION , как с ними работать нужно будет разобраться.
Из своего опыта могу добавить, что не нужно полагаться на один метод определения, т.к. на разных устройствах некоторые Action могут вообще не приходить.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Проверить наличие интернета.

Сообщение n0tb0dy » 29 май 2014, 10:15

да, да хорошее, замечание, спасибо

я тоже уже пришел к тому что надо проверять какой-нибудь ресурс в сети

Ответить