Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 229
#1

Кто как проверяет наличие интернета в своих приложениях - Программирование Android

26.06.2015, 16:18. Просмотров 419. Ответов 12
Метки нет (Все метки)

Доброго всем дня!

Подскажите, кто как проверяет наличие интернета в своих приложениях? Я проверяю по exception в классической реализации HttpURLConnection при отправке запроса. Но такой метод работает не всегда. Опишу сложности, с которыми я столкнулся. В некоторых ситуация, например, вы в московском метро, там есть бесплатный wi-fi, но нужно авторизоваться, чтобы выйти в интернет. Если вы не авторизованы, пытаетесь отправить запрос, то в этом случае exception не будет, а будет ответ с сервера московского метро, и ответ этот естественно не годится для дальнейшей обработки.
Поэтому повторю свой вопрос "Как Вы проверяет наличие интернета в своих приложениях?"

Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2015, 16:18     Кто как проверяет наличие интернета в своих приложениях
Посмотрите здесь:

Использование известных образов в своих приложениях - Программирование Android
Здравствуйте, у меня возник вот такой вопрос. Предположим, что я написал какую-нибудь игру, например, по вселенной Властелина Колец и...

Как записать потоковое аудио из интернета - Программирование Android
Есть приложение которое играет радио из адреса http://78.110.148.237:8000/;stream.nsv. Как можно реализовать запись аудио в формат mp3...

Как скорость соединения зависит от скорости интернета? - Программирование Android
Вопрос в что на эмуляторе приложение открывает диалог для регистрации в фейсбук зразу, а на телефоне это же приложение вылетает(крутится...

Использование Timer в андроид приложениях - Программирование Android
Всем привет. Люди добрые, как в андроид приложениях использовать таймер? Есть приложение, при запуске открывается Activity1. Нужно...

Не скрываются сенсорные кнопки в приложениях - Программирование Android
Вечер добрый. У меня xperia m2 5.1.1. Суть проблемы: Не скрываются сенсорные кнопки в приложениях. Вчера всё было нормально, а сейчас...

Создание таймеров в android-приложениях - Программирование Android
Здравствуйте. Изучаю программирование под android устройства. Хотелось бы узнать, как можно запрограммировать выполнение какой-либо функции...

Реклама от admob в приложениях Андроид - Программирование Android
Вставил рекламу в приложение в соответствии с инструкцией на сайте admob, но отображается только тестовый баннер. Почему? Manifest.xml: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
26.06.2015, 16:38     Кто как проверяет наличие интернета в своих приложениях #2
Hank, попробуйте запретить редирект

Java
1
.setInstanceFollowRedirects(false);
у HttpUrlConnection вызывайте перед тем, как сделать .connect()
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 229
26.06.2015, 17:00  [ТС]     Кто как проверяет наличие интернета в своих приложениях #3
YuraAAA, спасибо!
Буду ехать в метро домой с работы попробую .
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 229
02.07.2015, 00:13  [ТС]     Кто как проверяет наличие интернета в своих приложениях #4
В общем запрет на редирект не помог. Проверяю responseCode и он равен 200.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
02.07.2015, 11:35     Кто как проверяет наличие интернета в своих приложениях #5
Hank, таким способом вы не проверите. Потому что по факту Интернет здесь есть. В этом случае нужны совершенно другие методы типа чтения HTML-кода, наверное.
Думаю, можно просто проверить наличие нескольких адресов, и если каждый раз выдаётся примерно одна и та же страница, значит, вставлена заглушка, и человеку ничего не скачать. А можно ещё попробовать скачать какой-нибудь zip-файл или картинку, которые точно существуют. И по содержанию понять, HTML или не HTML.
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 229
02.07.2015, 11:59  [ТС]     Кто как проверяет наличие интернета в своих приложениях #6
Вышел из ситуации похожим образом. Искомый адрес, к которому я подключаюсь возвращает json, так вот, если в итоге скачанный контент не удается преобразовать в JsonObject в приложении, то считаем, что скачали какой-то мусор и в итоге полагаем, что интернета нет.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
02.07.2015, 21:05     Кто как проверяет наличие интернета в своих приложениях #7
Цитата Сообщение от CoolMind Посмотреть сообщение
Потому что по факту Интернет здесь есть.
Можно подробнее? С таким не сталкивался... Если я находясь в такой вайфай сети пробую скачать какой-нибудь файл из сети, мне успешно отдают файл со "страницей 403" местного метрополитена?
А как оно ведет себя на https:// ?
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
02.07.2015, 21:20     Кто как проверяет наличие интернета в своих приложениях #8
проще всего пинговать любой из https://ru.wikipedia.org/wiki/Google_Public_DNS
пингуется - значит инет есть, профит

а потом уже проверять то, что отдает сайт, потому что сайт может быть в коме или поломан
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
03.07.2015, 09:59     Кто как проверяет наличие интернета в своих приложениях #9
Tester64, как я полагаю, на любой такой запрос будет не 403, а страница с приглашением Метрополитена, МТС, Железных дорог или любого другого провайдера с бесплатным wi-fi и вводом логина-пароля. Хотя, может, и 403.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
03.07.2015, 09:59     Кто как проверяет наличие интернета в своих приложениях #10
Паблито, давно хочу проверять пингованием, есть пример?
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
03.07.2015, 11:09     Кто как проверяет наличие интернета в своих приложениях #11
Вообще на мой взгляд лучше всего для такой проверки подходит какая нибудь статичная страница, например просто одно слово, которое всегда будет отображаться по этому адресу. Если сервер свой - лучше сделать это прямо там, т.к. одним запросом проверяем не только доступность интернета, но еще и доступность самого сервера, а что именно не доступно сервер или вообще интернет обычно не важно. Ну а если доступа к серверу нет (имеется ввиду что нет возможности что-то там изменять), можно поискать там что-то статичное, а если и такого не нашлось, уже искать по всей сети, желательно что-то с малым временем отклика и около 100% аптаймом.
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
03.07.2015, 11:48     Кто как проверяет наличие интернета в своих приложениях #12
Вот набросал по-минимуму кода, исключения не обрабатывал и немного в лоб сделал парсинг ответа ping-а, но это работает.
Естественно это просто пример, не обязательно задачу стартовать так как там, главное принцип.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //
        new Thread(new Runnable() {
            @Override
            public void run() {
                String str = "";
                try {
                    Process process = Runtime.getRuntime().exec("/system/bin/ping -c 2 8.8.8.8");
                    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                    int i;
                    char[] buffer = new char[4096];
                    StringBuffer output = new StringBuffer();
                    while ((i = reader.read(buffer)) > 0)
                        output.append(buffer, 0, i);
                    reader.close();
                    str = output.toString();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                onPingComplete(str);
            }
        }).start();
    }
 
    private void onPingComplete(final String str) {
        if (str.contains("100% packet loss")) {
            // интернета нету
            Log.i("===", "no");
        } else {
            // интернет есть
            Log.i("===", "yes");
        }
    }
}


Я не проверял, мне лень, мжно ли ставить таймаут на HttpURLConnection. Если он там есть, то я думаю что его хватило бы с головой для проверки доступности сервиса и обработки ответа или исключения.
Код который я накидал - это просто проверка наличия интернета.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2015, 12:05     Кто как проверяет наличие интернета в своих приложениях
Еще ссылки по теме:

Генерация R.java в андроид приложениях - Программирование Android
Нужна помощь чайнику, решился научиться писать приложения для андроида. Для обкатки попытался скомпилировать проект готовой простенькой...

Как правильно вставить AlertDialog, если нет интернета? - Программирование Android
Здравствуйте!Как правильно вставить AlertDialog если нет интернета? Т.е. я через webView (wv) гружу сайт и если есть инет,то все идет...

Оставляете ли вы место для рекламы в приложениях - Программирование Android
Хочу чтобы в приложении были рекламные блоки, но пока не знаю сколько их будет и как они будут выглядеть. Единственное что приходит на ум...

Локальная база данных в Андроид приложениях - Программирование Android
Здравствуйте программисты. У меня при создании возникла проблема с хранением данных для приложения. Вот мой вопрос: Возможно ли создавать...

Желательны ли подобные решения в мобильных приложениях? - Программирование Android
В моб.прил. Tinkoff при запуске первым появляется активити приветствия (гифка на фоне, лого, описание банка и button "продолжить"), только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 229
03.07.2015, 12:05  [ТС]     Кто как проверяет наличие интернета в своих приложениях #13
Хотя, может, и 403
А как в ответе от сервера эта 403 будет выглядеть? Как определить, что именно 403 вернулось? Нужно саму страницу парсить, чтобы это узнать? По крайней мере в в responseCode, как я уже говорил, на такие запросы приходит ответ 200, что соответствует успешному ответу.
Yandex
Объявления
03.07.2015, 12:05     Кто как проверяет наличие интернета в своих приложениях
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru