Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
ILNAR_93
Android
231 / 231 / 25
Регистрация: 19.01.2013
Сообщений: 1,749
Записей в блоге: 3
#1

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

03.12.2015, 17:15. Просмотров 580. Ответов 15
Метки нет (Все метки)

Знаю весь интернет кишит примерами...

Но вот каким "хорошим", оптимальным решением пользуетесь вы товарищи?

Есть ли заложенный метод для определения наличия интернета.. т.е. например вроде бы соединение есть но доступа к сети нет.. Вот как знать что есть доступ к сети?))

Спасибо!))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2015, 17:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Каким способом вы определяете наличие соединения с интернетом (Программирование Android):

Как выводить сообщение об отсутствии соединения с интернетом? - Программирование Android
Здравствуйте! У меня в ViewPager загружаются 2 фрагмента. Каждый фрагмент делает асинхронный запрос, ответ парсится с помощю JSON. ...

Проверка Socket на наличие соединения - Программирование Android
Помогите сделать проверку сокета перед подключением. public void onClick(View view) { if (socket.isClosed()) { socket = new...

Как проверить наличие соединения с Интернетом\Сетью - C++ Builder
Привет всем. :) Вопрос простой и в гугле много ссылок и решений, но то что пробовал, не работает. Я знаю эту функцию...

Проверка соединения с интернетом - Delphi
Нужен самый простой код, проверки соединения с интернетом. Перерыл кучу примеров, но ничего не работает.

проверка соединения с интернетом - C#
подскажите пожалуйста возможнео ли реализовать проверку на наличие соединения с нетом не посылая запрос к серверу .без пинга. ?

Скорость соединения с интернетом - Delphi
Есть такое системное требование: Скорость Интернет-соединения: 256 Kbps Это входящая или исходящая скорость? И как найти ее...

15
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
03.12.2015, 17:18 #2
тема уже поднималась не раз и не два, потрудись поискать на форуме в этом разделе
1
ILNAR_93
Android
231 / 231 / 25
Регистрация: 19.01.2013
Сообщений: 1,749
Записей в блоге: 3
03.12.2015, 17:29  [ТС] #3
буду наверно пользоваться этим примером
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public boolean isNetworkOnline(Context context) {
        boolean status = false;
        try {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getNetworkInfo(0);
            if (netInfo != null && netInfo.getState() == NetworkInfo.State.CONNECTED) {
                status = true;
            } else {
                netInfo = cm.getNetworkInfo(1);
                if (netInfo != null && netInfo.getState() == NetworkInfo.State.CONNECTED)
                    status = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return status;
 
    }
0
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
03.12.2015, 17:32 #4
у меня универсальный способ - работает всегда: взять данные с известного сервака.
чаще всего на сервере делается метод echo, который возвращает или OK, или текущее время.
ну и все вызовы серверные тоже должны что-то осмысленное возвращать. передавать данные "в никуда" без проверки - не есть путь самурая. :-)
2
Hank
59 / 50 / 4
Регистрация: 28.12.2011
Сообщений: 288
03.12.2015, 17:40 #5
Кто как проверяет наличие интернета в своих приложениях
1
ILNAR_93
Android
231 / 231 / 25
Регистрация: 19.01.2013
Сообщений: 1,749
Записей в блоге: 3
03.12.2015, 17:42  [ТС] #6
bastrakov,
вот это как бы правильно..
но как то тоже мудрено))
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
07.12.2015, 08:52 #7
bastrakov, напиши код, тоже хочу поменять на запрос у сервера, а то бывает wifi есть, а инета нет.
0
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
07.12.2015, 09:40 #8
принял за шутку, но вот код - не жалко.
Java
1
2
3
4
5
6
7
8
9
10
11
12
    //взять из инета.
    private InputStream downloadUrl(String urlString) throws IOException {
        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        conn.connect();
        InputStream stream = conn.getInputStream();
        return stream;
    }
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
07.12.2015, 11:02 #9
Никаких шуток. А запрос я имел ввиду к серверам гугла, типа 8.8.8.8, бо urlString может запросить неотвечающий адрес.
0
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
07.12.2015, 11:17 #10
ануок.
в большинстве нормальных проектов, сервер - свой. и как я писал выше, на нем делают примитивное "эхо", которое может возвращать или просто ОК, или некую осмысленную инфу, типа: времени, имени инстанса, id сессии.
для публичных проектов можно использовать любой публичный сервис: yahoo или там какойнить google, да даже мало кому известный ты-ндекс например. :-)
1
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
07.12.2015, 11:31 #11
Цитата Сообщение от bastrakov Посмотреть сообщение
сервер - свой. и как я писал выше, на нем делают примитивное "эхо"
А если свой, можно же все что он возвращает оборачивать в json с ключем, например, error. И в нем ошибка если есть, если нет еще какое поле добавить. А если нет и того и другого - значит вернулась ерунда (либо заглушка от wifi, либо не весь ответ дошел и т.д.). Плюс в том что не нужно делать доп. запросов. Ну и при отдельном запросе на проверку есть еще шанс на то что между проверкой и реальным запросом что-то произошло и данные получены не те, которые ожидаешь.
1
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
07.12.2015, 11:44 #12
...допишу.
в одном из проектов, мы использовали еще одни плюс "эха" - замер времени ответа. и его использовали в качестве индикатора "качества интернета". ни у для своих нужд, типа "при медленном канале, ограничить количество записей в ответе...".
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
07.12.2015, 12:28 #13
Да, вообще круто было бы запилить такое:
1. Доступ физический к сети (да/нет).
2. Качество соединения (высокое/среднее/низкое).
3. Вид сети (wifi/мобильный).
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
07.12.2015, 14:00 #14
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
я немного напрягся, может что-то из этого и выйдет
проверяем пинги на гугловский dns - у него аптайм практически 100%, если на него не идут пинги, либо нет инета либо вы за http прокси сервером (что случается не так часто и это тема отдельного разговора)

методы помещаем где-то в MainActivity, я не стал делать с помощью интерфейсов, половина народа не осилит, а кто осилит и сам переделает
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
    private void onInternetChecked(boolean hasInternet) {
        if (hasInternet) Toast.makeText(this, "таки есть", Toast.LENGTH_SHORT).show();
        else Toast.makeText(this, "таки нету", Toast.LENGTH_SHORT).show();
    }
 
    private static void checkInternet(final MainActivity context) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                boolean result = false;
                try {
                    Process p = Runtime.getRuntime().exec("ping -c 3 8.8.8.8");
                    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
                    String inputLine;
                    StringBuilder sb = new StringBuilder();
                    while ((inputLine = in.readLine()) != null) sb.append(inputLine);
                    Pattern pattern = Pattern.compile(", (\\d+)% packet loss,");
                    Matcher m = pattern.matcher(sb.toString());
                    int loss = 100;
                    if (m.find()) loss = Integer.parseInt(m.group(1));
                    if (loss > -1 && loss < 100) result = true;
                    in.close();
                } catch (IOException ignored) {
                }
                final boolean finalResult = result;
                context.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        context.onInternetChecked(finalResult);
                    }
                });
            }
        }).start();
    }
манифест
XML
1
    <uses-permission android:name="android.permission.INTERNET" />
если коротко, то проверяем строку ответа на пинги, если там есть подстрока, содержащая % потерь от 0 до 99 значит инет есть, иначе его нет

проверил на эмуляторе и телефоне по wifi и 3g (с серым ip)
6
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
10.12.2015, 21:36 #15
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C интерфейсами не то что надо, сделал так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static boolean checkInternet2() {
    Runtime runtime = Runtime.getRuntime();
    try {
        Process mIpAddrProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int mExitValue = mIpAddrProcess.waitFor();
        Log.d("Internet", "mExitValue " + mExitValue);
        if (mExitValue == 0) {
            return true;
        } else {
            return false;
        }
    } catch (InterruptedException ignore) {
        ignore.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}
Осталось скрестить оба варианта.
1
10.12.2015, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2015, 21:36
Привет! Вот еще темы с ответами:

Проверка соединения с интернетом - Visual Basic .NET
Здравствуйте уважаемые обитатели. Я через свою программу, скачиваю из интернета файл. Все нормально, но вот когда интернет отключен, у...

Проверка соединения с интернетом - C++ Builder FireMonkey
Вот уж не думал, что буду задавать такой вопрос: Как проверить соединение с интернетом? RAD Studio XE6 C++ Builder, FireMonkey Mobile...

Ярлык соединения с интернетом - Windows
Создали на рабочем столе ярлык соединения с интернетом. Запускаем - все работает. Но через какое-то время - 1 час или 2 часа - доступ в...

Проверка соединения с Интернетом - C#
Ребят, как узнать есть ли доступ в Интернет?


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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