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

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

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

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

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

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

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

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

Локальная база данных в Андроид приложениях Android
Android Использование Timer в андроид приложениях
Android Как скорость соединения зависит от скорости интернета?
Android Создание таймеров в android-приложениях
Как правильно вставить AlertDialog, если нет интернета? Android
Оставляете ли вы место для рекламы в приложениях Android
Android Не скрываются сенсорные кнопки в приложениях
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
26.06.2015, 16:38     Кто как проверяет наличие интернета в своих приложениях #2
Hank, попробуйте запретить редирект

Java
1
.setInstanceFollowRedirects(false);
у HttpUrlConnection вызывайте перед тем, как сделать .connect()
Hank
48 / 39 / 3
Регистрация: 28.12.2011
Сообщений: 225
26.06.2015, 17:00  [ТС]     Кто как проверяет наличие интернета в своих приложениях #3
YuraAAA, спасибо!
Буду ехать в метро домой с работы попробую .
Hank
48 / 39 / 3
Регистрация: 28.12.2011
Сообщений: 225
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
48 / 39 / 3
Регистрация: 28.12.2011
Сообщений: 225
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:// ?
Паблито
2012 / 1754 / 545
Регистрация: 12.05.2014
Сообщений: 6,208
Завершенные тесты: 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
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
03.07.2015, 11:09     Кто как проверяет наличие интернета в своих приложениях #11
Вообще на мой взгляд лучше всего для такой проверки подходит какая нибудь статичная страница, например просто одно слово, которое всегда будет отображаться по этому адресу. Если сервер свой - лучше сделать это прямо там, т.к. одним запросом проверяем не только доступность интернета, но еще и доступность самого сервера, а что именно не доступно сервер или вообще интернет обычно не важно. Ну а если доступа к серверу нет (имеется ввиду что нет возможности что-то там изменять), можно поискать там что-то статичное, а если и такого не нашлось, уже искать по всей сети, желательно что-то с малым временем отклика и около 100% аптаймом.
Паблито
2012 / 1754 / 545
Регистрация: 12.05.2014
Сообщений: 6,208
Завершенные тесты: 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     Кто как проверяет наличие интернета в своих приложениях
Еще ссылки по теме:

Android Использование известных образов в своих приложениях
Реклама от admob в приложениях Андроид Android
Генерация R.java в андроид приложениях Android
Желательны ли подобные решения в мобильных приложениях? Android
Как записать потоковое аудио из интернета Android

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

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

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