2013-02-19 2 views
1

Я хочу проверить подключение к Интернету в целом приложении. Я искал его для поиска, но в результате каждый создавал метод экземпляра в каждом классе и пытается проверить подключение к Интернету. Мой план - создать класс со статическим методом и проверить его без создания экземпляра моего класса. Это хорошая идея? Или я должен попробовать другой путь? Мой план должен сделать что-то вроде этого:Лучший способ проверить подключение к Интернету всего приложения

public class CheckInternetConnecting { 

    public static boolean isOnline(Context context) { 
     ConnectivityManager cm = 
      (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     return cm.getActiveNetworkInfo() != null && 
      cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
    } 
} 
+0

Просто сделайте свой метод статическим – Warpzit

+0

Взгляните на мой ответ: http://stackoverflow.com/a/14922229/450534 –

+0

Нет проблем с этим, кроме, возможно, трудно создать модульные тесты, поскольку это статический метод, и вы не можете просто издеваться над этим (easilly). – Steven

ответ

0

Ваш подход абсолютно нормально. Я бы порекомендовал добавить пакет Utils в ваш проект и разместить там вспомогательные классы. Поэтому вместо класса CheckInternetConnecting создайте класс NetworkHelper и разместите там свой статический метод.

Добавление пакета:
На левой стороне затмения, в вашем пакете проводника правой кнопкой мыши папку Src и добавить новый пакет. Важно указать название своего пакета, например, когда ваше имя пакета com.my.project, чем добавить пакет com.my.project.utils ... Затем вы можете добавить свой класс NetworkHelper в новый пакет, например, щелкнув правой кнопкой мыши и добавление нового файла. Скопируйте статический код в NetworkHelper, а затем вы все сделали ...

+0

Да, я имел в виду пакет - уже исправил его ... –

+0

Помогает ли этот пример? –

+0

@Chris Conway благодарит за ответ Я поймал, что вы сказали. Он отлично работает – bestDroid

1

Вы можете также проверить подключение к Интернету следующим образом ..

public boolean testConnection() { 

    try { 
     boolean connectionStatus=false; 

     InetAddress addr=InetAddress.getByName("8.8.8.8");//google dns 8.8.8.8 


     connectionStatus=addr.isReachable(1000); // 1second time for response 

    }        
    catch (Exception e) { 
     e.printStackTrace(); 
     System.out.println(e.toString()); 
    } 

    return connectionStatus; 
} 
+0

не работает, isReachable всегда возвращает false для меня. – kritzikratzi

+0

В сети будут потери пакетов. Увеличьте время отклика от 1000 мс (1 секунда) до 2000 мс (2 секунды). – Zain

+0

Я тоже пробовал 10 секунд, всегда возвращает false для 8.8.8.8 для меня. может быть проблемой разрешения (кажется, когда icmp не разрешен, tcp-порт 7). Я могу заставить его работать, если я запускаю java с правами суперпользователя, но это определенно не является возможным решением. – kritzikratzi

0

Возможно, вы можете рассмотреть вопрос регистрации широковещательного приемника и прослушивание изменений подключения, как объяснено here.

Смежные вопросы