2015-07-28 3 views
-1

Я пытаюсь найти способ, чтобы знать, когда пользователь имеет подключение к Интернету, так как теперь у меня есть этот метод:Как сделать пинг в Android для Google

public boolean isNetworkOnline() { 
    boolean status=false; 
    try{ 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getNetworkInfo(1); 
     if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) { 
      status= true; 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
     return false; 
    } 
    return status; 
} 

Этот метод возвращает истину, если пользователь равен CONNECTED, но нет, если пользователь имеет INTERNET CONNECTION, поэтому я думал, что если этот метод возвращает true, вызовите другой метод, чтобы проверить, имеет ли пользователь подключение к Интернету. Например, кто-то может быть подключен к маршрутизатору, но без подключения к Интернету, поэтому я хочу знать, когда у пользователя есть подключение к Интернету или нет.

Я прочитал это answer и это other, но все из них возвращается мне false, когда я получил Internet connection .... Я думал, что делает метод, который делает пинг на www.google.com это хороший подход, чтобы знать, если у кого-то есть подключение к интернету, поэтому я пытался это сделать, но это не помогло мне ...

Любая идея или хороший подход (если это лучше, чем мои мысли лучше) знать, когда у пользователя есть подключение к Интернету?

+0

возможно дубликат [подключение Android проверка интернет] (HTTP: // StackOverflow .com/questions/9570237/android-check-internet-connection) –

ответ

2

Можете ли вы попробовать этот метод?

public boolean checkInternectConnection() { 
     try { 
      InetAddress inAddress= InetAddress.getByName("http://google.com"); 
      if (inAddress.equals("")) { 
       return false; 
      } else { 
       return true; 
      } 
     } catch (Exception e) { 
      return false; 
     } 
    } 
+0

Позвольте мне проверить ... держитесь –

+0

Должен ли я помещать этот метод в поток? Потому что он не дает времени, чтобы вернуть истину или нет ... Как мне это сделать? –

+0

Да, лучше, если вы можете использовать 'AsyncTask' для выполнения этой проверки. Потому что 'NetworkOnMainThreadException' произойдет, если вы попытаетесь сделать это внутри основного потока активности. Вы можете обратиться к [здесь] (http://stackoverflow.com/questions/10662805/inetaddress-in-android) за информацией об этом. – arunatebel

1

Пожалуйста, проверьте this ответ и посмотреть, если его полезно или нет

Вы можете попробовать этот код

try { 
    URL url = new URL("http://"+params[0]); 

    HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
    urlc.setRequestProperty("User-Agent", "Android Application:"+Z.APP_VERSION); 
    urlc.setRequestProperty("Connection", "close"); 
    urlc.setConnectTimeout(1000 * 30); // mTimeout is in seconds 
    urlc.connect(); 

    if (urlc.getResponseCode() == 200) { 
     Main.Log("getResponseCode == 200"); 
     return new Boolean(true); 
    } 
} catch (MalformedURLException e1) { 
    e1.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

Должно быть, это правильно? Так как это имеет 'setConnectionTimeout()' правильно? –

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