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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.96
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
#1

Проверка интернет соединения - Программирование Android

07.06.2014, 09:59. Просмотров 3360. Ответов 16
Метки нет (Все метки)

Как же всё-таки прописать грамотную проверку интернет соединения?

Необходимо при включенном wi-fi и отсутствии интернета в WebView выводить необходимые сообщения.

Код такой: (на основе http://forum.startandroid.ru/viewtopic.php?f=41&t=3022)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import java.net.HttpURLConnection;
import java.net.URL;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebSettings;
import android.webkit.WebView;
 
public class NewsActivity extends Activity {
    
    WebView mWebViewNews;
    WebView mWebViewStock;
    WebView mWebViewPrice;
    
    final static String TAG ="mylog";
    Thread t2, t3;
    int existInternet =0;
    
    String News = "<html><body>Нет интернет соединения. \n </body></html>";
    String Stock = "<html><body>Проверьте ваше интернет подключение </body></html>";
    String Price = "<html><body>Проверьте ваше интернет подключение </body></html>";
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news);
         
        mWebViewNews = (WebView) findViewById (R.id.webViewNews);
        mWebViewStock = (WebView) findViewById (R.id.webViewStock);
        mWebViewPrice = (WebView) findViewById (R.id.webViewPrice);
            
    Log.d(TAG, "---- start---------");             
    
    t2 = new Thread(new Runnable() {
                    public void run() {    
                                            checkConnectivity("http://tpk-tek.ru/pda/index/news_mobile/0-21/");                         
                    }
            });
   
    t3 = new Thread(new Runnable() {
                    public void run() {                                                  
                             try { 
                                     Thread.sleep(1000); // это 1 секунда,
                                     // нужно настроить для вашего соединения, сколько готовы ждать ответа
                                    if (t2.isAlive())  {
                                            //existInternet = 0; // интернета нет
                                            t2.interrupt();
                                            t2.stop();
                                    }                              
                                   
                                    
                                    Log.d(TAG, "---- internet: " + existInternet);
                            } catch (InterruptedException e) {                                     
                                    e.printStackTrace();                                   
                            }                                      
                    }
            });
   
            t2.start();            
            t3.start();
           
            try {
                    t3.join(); // ожидание завершения потока t3
            } catch (InterruptedException e) {
                    e.printStackTrace();
            }
            Log.d(TAG, "----Main internet: " + existInternet);
}
     
public void checkConnectivity(String url)  {
    try{  
            HttpURLConnection.setFollowRedirects(false);           
        HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection();          
       // conn.setRequestMethod("HEAD");
        conn.setRequestMethod("GET");
            if(conn.getResponseCode() == HttpURLConnection.HTTP_OK) {  
                            existInternet = 1; // интернет есть                        
            }
            
            
            
    }catch(Exception e) {
            Log.d(TAG, "error: " + e); // на ошибку можно не обращать внимание              
    }   
    
 
// отображение данных если URL доступен
if (existInternet == 1) mWebViewNews.loadUrl("http://tpk-tek.ru/pda/index/news_mobile/0-21/");
if (existInternet == 1) mWebViewStock.loadUrl("http://tpk-tek.ru/pda/index/stock_mobile/0-22");
if (existInternet == 1) mWebViewPrice.loadUrl("http://tpk-tek.ru/pda/index/skachat_prajs/0-7");
    
 
// решаем проблеммы с кодировкой
WebSettings settingsNews = mWebViewNews.getSettings();
settingsNews.setDefaultTextEncodingName("utf-8");
 
// отображение данных если URL недоступен
if (existInternet == 0) mWebViewNews.loadDataWithBaseURL(null, News, "text/html", "utf-8", null);
 
WebSettings settingsStock = mWebViewStock.getSettings();
settingsStock.setDefaultTextEncodingName("utf-8");
if (existInternet == 0) mWebViewStock.loadDataWithBaseURL(null, Stock, "text/html", "utf-8", null);
 
WebSettings settingsPrice = mWebViewPrice.getSettings();
settingsPrice.setDefaultTextEncodingName("utf-8");
if (existInternet == 0) mWebViewPrice.loadDataWithBaseURL(null, Price, "text/html", "utf-8", null);
    
 
}
}
Но тут извечная проблема, ели wi-fi включен, а интернета нет - то приложение вылетает!

Приложение работает корректно либо при включенном wi-fi и рабочем интернете, либо при выключенном wi-fi.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2014, 09:59     Проверка интернет соединения
Посмотрите здесь:

Проверка интернет соединения - Программирование Android
Добрый день , я хотел бы проверить интернет соединение , у меня уже есть функция: public boolean checkNetworkStatus(Context context){ ...

Проверка наличия интернет соединения - Программирование Android
Если в public void onStart() { super.onStart(); } вставить код проверки на включен ли интернет и если не...

Перезагрузка интернет соединения по условию - Программирование Android
Доброго времени суток, Господа. У меня возникла проблема. Решил воспользоваться опытом программирования, чтобы ее решить. Проблема...

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

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

Проверка соединения с сайтом через HttpUrlConnection - Программирование Android
я нашла кучу информации, где после подключения что-либо выдает. Как написать программный код, чтоб выдавало только удалось подсоединиться...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
07.06.2014, 13:42     Проверка интернет соединения #2
Цитата Сообщение от mcGurov Посмотреть сообщение
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK) { *
* * * * * * * * * * * * * * existInternet = 1; // интернет есть * * * * * * * * * * * *
* * * * * * }
неверно. Любой HttpStatus говорит о том, что интернет есть. А вот SocketTimeoutException, ConnectionRefused, UnknownHostException которые можно словить в catch (Exception e) говорит о том, что интернета нет.

Если Вам нужно проверять непосредственно перед запросом - это одна ситуация. Если Вам нужно постоянно следить за интернетом и мгновенно проверять его состояние - это другая. Что именно нужно?
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
07.06.2014, 14:11  [ТС]     Проверка интернет соединения #3
Необходимо проверять интернет при переходе на активность с WebView, если есть интернет, то грузится текст по URL, если нет, то выводится какое нить сообщение...
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
07.06.2014, 14:19     Проверка интернет соединения #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
mcGurov, попробуйте так:

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;
 
    }
вернёт true если интернет есть, false если нет
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
07.06.2014, 14:38  [ТС]     Проверка интернет соединения #5
Eclipse ругается на isNetworkOnline Illegal modifier for parameter isNetworkOnline; only final is permitted
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
07.06.2014, 14:56     Проверка интернет соединения #6
mcGurov, покажите листинг класса
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
07.06.2014, 15:12  [ТС]     Проверка интернет соединения #7
Туплю похоже страшно, т.к. многого не знаю...
Теперь ругается на скобки (Context context) 38 строка...

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.net.HttpURLConnection;
import java.net.URL;
 
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebSettings;
import android.webkit.WebView;
 
public class NewsActivity extends Activity {
    
    WebView mWebViewNews;
    WebView mWebViewStock;
    WebView mWebViewPrice;
    
    final static String TAG ="mylog";
    Thread t2, t3;
    int existInternet =0;
    boolean status = false;
    
    String News = "<html><body>Нет интернет соединения. \n </body></html>";
    String Stock = "<html><body>Проверьте ваше интернет подключение </body></html>";
    String Price = "<html><body>Проверьте ваше интернет подключение </body></html>";
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news);
         
        mWebViewNews = (WebView) findViewById (R.id.webViewNews);
        mWebViewStock = (WebView) findViewById (R.id.webViewStock);
        mWebViewPrice = (WebView) findViewById (R.id.webViewPrice);
            
        boolean isNetworkOnline (Context context) {
            
            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;
     
        }
************
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
09.06.2014, 09:43     Проверка интернет соединения #8
mcGurov, а зачем Вы метод в метод запихнули?) Вынесите его оттуда.
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
09.06.2014, 10:08  [ТС]     Проверка интернет соединения #9
Всё верно! Спасибо!
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
09.06.2014, 10:12     Проверка интернет соединения #10
mcGurov, контекст в Вашем случае это this. Т.е. можно вызвать boolean isNetworkOnlineNow = isNetworkOnline(this);
Sony17
28 / 28 / 6
Регистрация: 24.05.2013
Сообщений: 157
09.06.2014, 19:35     Проверка интернет соединения #11
Цитата Сообщение от YuraAAA Посмотреть сообщение
постоянно следить за интернетом и мгновенно проверять его состояние
А это как реализовать? На ум приходят только две мысли:
1) Отлавливать все возможные исключения, связанные с интернетом
2) Создать сервис, который будет ежесекундно проверять соединение с интернетом
Или есть базовые слушатели какие?
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
09.06.2014, 20:17     Проверка интернет соединения #12
Sony17, есть ресивер - BroadcastReceiver c android.net.conn.CONNECTIVITY_CHANGE фильтром
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
09.06.2014, 21:54  [ТС]     Проверка интернет соединения #13
Цитата Сообщение от YuraAAA Посмотреть сообщение
BroadcastReceiver
Цитата Сообщение от Sony17 Посмотреть сообщение
А это как реализовать?
Вот нашёл - Как при запуске проверить включен ли обычный интернет?

Добавлено через 1 час 13 минут
YuraAAA, А где формировать условие? Условие никак не срабатывает...
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.webkit.WebView;
 
public class NewsActivity extends Activity {
    
    WebView mWebViewNews;
    WebView mWebViewStock;
    WebView mWebViewPrice;
    
    String News = "<html><body>Нет интернет соединения. \n </body></html>";
    String Stock = "<html><body>Проверьте ваше интернет подключение </body></html>";
    String Price = "<html><body>Проверьте ваше интернет подключение </body></html>";
    boolean status;
    
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news);
         
        mWebViewNews = (WebView) findViewById (R.id.webViewNews);
        mWebViewStock = (WebView) findViewById (R.id.webViewStock);
        mWebViewPrice = (WebView) findViewById (R.id.webViewPrice);
        
     // отображение данных если URL недоступен
        if (status = true) mWebViewNews.loadUrl("http://tpk-tek.ru/pda/index/news_mobile/0-21/");
        if (status = true)  mWebViewStock.loadUrl("http://tpk-tek.ru/pda/index/stock_mobile/0-22");
        if (status = true)  mWebViewPrice.loadUrl("http://tpk-tek.ru/pda/index/skachat_prajs/0-7");   
     
        // отображение данных если URL недоступен
        if (status = false) mWebViewNews.loadDataWithBaseURL(null, News, "text/html", "utf-8", null);
        if (status = false) mWebViewStock.loadDataWithBaseURL(null, Stock, "text/html", "utf-8", null);
        if (status = false) mWebViewPrice.loadDataWithBaseURL(null, Price, "text/html", "utf-8", null);
 
     
    }
        public boolean isOnline() {
            
            ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo nInfo = cm.getActiveNetworkInfo();
            if (nInfo != null && nInfo.isConnected()) {
                status = true;
                return true;
            }
            else {
                status = false;
                return false;
            }
            
            
        }
     
}
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
10.06.2014, 10:27     Проверка интернет соединения #14
Цитата Сообщение от mcGurov Посмотреть сообщение
// отображение данных если URL недоступен
перед этой строчкой надо добавить
Java
1
status = isOnline();
Вы же нигде не присваиваете этой переменной значение.
И ещё.
Java
1
if (status = true)
это неправильно.

В джаве сравнение происходит с помощью == или .equals.

В Вашем случае код должен быть таким:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.....
 
mWebViewPrice = (WebView) findViewById (R.id.webViewPrice);
 
     // отображение данных если URL недоступен
        if ( isOnline()) { 
            mWebViewNews.loadUrl("http://tpk-tek.ru/pda/index/news_mobile/0-21/");
            mWebViewStock.loadUrl("http://tpk-tek.ru/pda/index/stock_mobile/0-22");
            mWebViewPrice.loadUrl("http://tpk-tek.ru/pda/index/skachat_prajs/0-7"); 
       else {
           mWebViewNews.loadDataWithBaseURL(null, News, "text/html", "utf-8", null);
           mWebViewStock.loadDataWithBaseURL(null, Stock, "text/html", "utf-8", null);
           mWebViewPrice.loadDataWithBaseURL(null, Price, "text/html", "utf-8", null);
           }
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
10.06.2014, 14:06  [ТС]     Проверка интернет соединения #15
Всё получилось! СпасибоYuraAAA! Но проблема не решилась, при включенном wi-fi и отсутствии инета приложение теперь не вылетает, но и текст не отображается в WebView...

Вот пример работающего (частично) кода, кому-то может пригодится...
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package ru.teploenergokomplect;
 
 
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
 
public class NewsActivity extends Activity {
    
    WebView mWebViewNews;
    WebView mWebViewStock;
    WebView mWebViewPrice;
    
    String News = "<html><body>Нет интернет соединения. \n </body></html>";
    String Stock = "<html><body>Проверьте ваше интернет подключение </body></html>";
    String Price = "<html><body>Проверьте ваше интернет подключение </body></html>";
    
    boolean status;
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news);
         
        mWebViewNews = (WebView) findViewById (R.id.webViewNews);
        mWebViewStock = (WebView) findViewById (R.id.webViewStock);
        mWebViewPrice = (WebView) findViewById (R.id.webViewPrice);
        
        if ( isOnline()) { 
        // переходим по URL если доступен
            mWebViewNews.loadUrl("http://tpk-tek.ru/pda/index/news_mobile/0-21/");
            mWebViewStock.loadUrl("http://tpk-tek.ru/pda/index/stock_mobile/0-22");
            mWebViewPrice.loadUrl("http://tpk-tek.ru/pda/index/skachat_prajs/0-7"); 
        }
       else {
           
           
           status = isOnline();
 
        // решаем проблеммы с кодировкой
           WebSettings settingsNews = mWebViewNews.getSettings();
           settingsNews.setDefaultTextEncodingName("utf-8");
       // выводим текст если URL не доступен
       mWebViewNews.loadDataWithBaseURL(null, News, "text/html", "utf-8", null);
       
       WebSettings settingsStock = mWebViewStock.getSettings();
       settingsStock.setDefaultTextEncodingName("utf-8");
           mWebViewStock.loadDataWithBaseURL(null, Stock, "text/html", "utf-8", null);
           
           WebSettings settingsPrice = mWebViewPrice.getSettings();
           settingsPrice.setDefaultTextEncodingName("utf-8");
           mWebViewPrice.loadDataWithBaseURL(null, Price, "text/html", "utf-8", null);
           }
        
        
     
}
        
      boolean isOnline() {
            
            ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo nInfo = cm.getActiveNetworkInfo();
            if (nInfo != null && nInfo.isConnected()) {
                status = true;
                return true;
            }
            else {
                status = false;
                return false;
            }
            
            
        }
    
        
      
}
DoomTrooper
2 / 2 / 1
Регистрация: 21.01.2015
Сообщений: 51
08.06.2015, 21:14     Проверка интернет соединения #16
Java
1
2
3
4
5
6
7
 boolean isOnline() {
            
            ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo nInfo = cm.getActiveNetworkInfo();
       return nInfo != null && nInfo.isConnected();
           
            }
такая проверка не подходит если например включен только wifi а интернет отсутствует как тогда быть ведь специального метода вроде нет я поискал в документации не нашел может подскажете как решить эту задачу?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2015, 21:42     Проверка интернет соединения
Еще ссылки по теме:

Обработка обрыва соединения - Программирование Android
У меня есть TCP клиент андроид и TCP сервер на Qt в Wibndows. И вот такой вопрос, если я передаю данные с клиента на сервер и произошел...

Не выбрать устройство для соединения Bluetooth - Программирование Android
Пытаюсь получить в deviceSelected данные для подключения, но get(position); дает ошибку error: cannot find symbol method get(int) ...

Ошибка соединения с сервером после обновления OC с 4.4 до 5 - Программирование Android
Привет всем андроидоведам!!! Столкнулся вот с такой незадачей: при отладке приложения шлю DELETE запрос на сервер (сервер мой...

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

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


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

Или воспользуйтесь поиском по форуму:
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
08.06.2015, 21:42     Проверка интернет соединения #17
Как правильно вставить AlertDialog, если нет интернета?
Yandex
Объявления
08.06.2015, 21:42     Проверка интернет соединения
Ответ Создать тему
Опции темы

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