2012-02-07 3 views
5

Поэтому у меня есть метод, который проверяет, если устройство подключено к Интернету based on this oneAndroid: Проверьте подключение к серверу

Он работает нормально, но в нескольких случаях я считаю, что хотя телефон показывает подключен к Интернет, он по-прежнему не имеет доступа к моему серверу. То, что я действительно ищу, чтобы проверить это подключение к моему конкретному URL.

Как я мог реализовать это?

ответ

23

Вы могли бы сделать что-то вроде:

public boolean isConnectedToServer(String url, int timeout) { 
    try{ 
     URL myUrl = new URL(url); 
     URLConnection connection = myUrl.openConnection(); 
     connection.setConnectTimeout(timeout); 
     connection.connect(); 
     return true; 
    } catch (Exception e) { 
     // Handle your exceptions 
     return false; 
    } 
} 

Это будет пытаться подключиться к URL-адресу вашего сервера, и если это не удается, вы, очевидно, не имеют связи. ;-)

+0

Возможно, ваше проголосовало за то, что вы определяете тайм-аут как длинный, но .setConnectTimeout (который вы пропустили) принимает только значение int. –

+0

Знаете ли вы об NetworkOnMainThreadException? .. – levi

+0

@levi, я не уверен, к чему вы клоните, поэтому мой ответ должен был бы не делать этого? – AedonEtLIRA

0
Runtime runtime = Runtime.getRuntime(); 
      Process proc; 
      try { 
       proc = runtime.exec("ping -c 1"+ (String) getText(R.string.Server)); 
       proc.waitFor(); 
       int exit = proc.exitValue(); 
       if (exit == 0) { // normal exit 


       } else { // abnormal exit, so decide that the server is not 
          // reachable 


       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } // other servers, for example 
      catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
Смежные вопросы