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

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

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

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

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

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

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

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

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

Кто-нибудь использует антикаптчу в своих приложениях? - Visual Basic .NET
Кто-нибудь использует антикаптчу в своих приложениях??? Если да,то если не трудно покажите пример использования. Спасибо

Кто какие варианты шрифтов использует в своих 3D приложениях? - DirectX
Поделитесь вашим опытом вариантов рисования шрифтами в 3D, пожалуйста.

Как подключить и использовать LUA-скрипты в своих приложениях написанных на C++Builder (6) - Lua
По просьбе KTYJIX пишу небольшую инструкцию, как подключить и использовать этот замечательный язык Lua в своих приложениях написанных на...

Реклама в своих приложениях - Delphi
Например, в своем приложения для андроид можно засунуть рекламу, допустим системы Mobclix. Пишу программы на Delphi, можно ли туда...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,433
Записей в блоге: 2
26.06.2015, 16:38 #2
Hank, попробуйте запретить редирект

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

а потом уже проверять то, что отдает сайт, потому что сайт может быть в коме или поломан
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
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,649
Завершенные тесты: 1
03.07.2015, 11:09 #11
Вообще на мой взгляд лучше всего для такой проверки подходит какая нибудь статичная страница, например просто одно слово, которое всегда будет отображаться по этому адресу. Если сервер свой - лучше сделать это прямо там, т.к. одним запросом проверяем не только доступность интернета, но еще и доступность самого сервера, а что именно не доступно сервер или вообще интернет обычно не важно. Ну а если доступа к серверу нет (имеется ввиду что нет возможности что-то там изменять), можно поискать там что-то статичное, а если и такого не нашлось, уже искать по всей сети, желательно что-то с малым временем отклика и около 100% аптаймом.
Pablito
2473 / 1918 / 595
Регистрация: 12.05.2014
Сообщений: 6,746
Завершенные тесты: 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. Если он там есть, то я думаю что его хватило бы с головой для проверки доступности сервиса и обработки ответа или исключения.
Код который я накидал - это просто проверка наличия интернета.
Hank
51 / 42 / 3
Регистрация: 28.12.2011
Сообщений: 240
03.07.2015, 12:05  [ТС] #13
Хотя, может, и 403
А как в ответе от сервера эта 403 будет выглядеть? Как определить, что именно 403 вернулось? Нужно саму страницу парсить, чтобы это узнать? По крайней мере в в responseCode, как я уже говорил, на такие запросы приходит ответ 200, что соответствует успешному ответу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2015, 12:05
Привет! Вот еще темы с ответами:

Хранимая процедура, которая проверяет наличие записи - PostgreSQL
Здравствуйте. Нужно создать хранимую процедуру Send1medCons (клиника, фио, диагноз, возраст = 18), которая проверяет наличие клиники....

Макрос, который проверяет наличие имени в файле - VBA
Какой макрос можно записать в модуле при котором если в книге Excel-я нету имя Артур то закрыть эту книгу а если такое имя существует то...

При включении exe-шника программа проверяет наличие записи в бд - VBA
При включении exe-шника программа проверяет наличие записи в бд и в зависимости от этого переходит на ту или иную форму! Как можно это...

Программа проверяет наличие вхождения второй введенной строки в первую - C (СИ)
Программа проверяет наличие вхождения второй введенной строки в первую--->.:read: Заранее спасибо


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.07.2015, 12:05
Ответ Создать тему
Опции темы

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