2012-11-04 17 views
6

Tworzę program i muszę używać Wi-Fi do łączenia się z Internetem. Znajduję pewne informacje, aby sprawdzić, czy wifi jest podłączone, czy nie. Ale w pewnej sytuacji możesz podłączyć wifi AP, ale nadal nie możesz używać Internetu, takiego jak konto i hasło potrzebne do połączenia z wifi, do certyfikatu w https, lub wifi AP nie jest w stanie połączyć się z Internetem. Jak mogę sprawdzić podłączony Internet?jak sprawdzić prawdziwy Internet podłączony do Androida?

Odpowiedz

5

Po prostu wykonaj "Ping" na www.google.com szansa, że ​​są niedostępne są bardzo niskie.

P.S. że to, co robimy w naszej aplikacji ..

public static boolean isReachable(Context context) { 
    // First, check we have connectivity 
    final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    final NetworkInfo netInfo = connMgr.getActiveNetworkInfo(); 

    if (netInfo != null && netInfo.isConnected()) { 
     // check if google is reachable 
     try { 
      URL url = new URL("http://www.google.com"); 
      HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
      urlc.setRequestProperty("Connection", "close"); 
      urlc.setConnectTimeout(10 * 1000); // Ten seconds timeout in milliseconds 
      urlc.connect(); 
      if (urlc.getResponseCode() == 200) { // success 
       return true; 
      } else { // Fail 
       return false; 
      } 
     } catch (IOException e) { 
      Log.e(TAG, e.getMessage()); 
      return false; 
     } 
    } else { 
     return false; 
    } 
} 
+0

Myślę, że ping jest dobrą metodą, ale w android4.0 ta metoda wymaga nowego wątku do implementacji. czy istnieją inne sposoby bez nowego wątku? –

+0

Powinieneś zawsze robić rzeczy sieciowe w oddzielnym wątku (nie głównym wątku), aby zapewnić szybkość reakcji aplikacji. – Frank

+0

mm, ok, jest tam kilka meto takich jak wifimanager lub networkInfo w Androidzie, które mogą bezpośrednio sprawdzić prawdziwy Internet –

1

Według poniższej metody, jeśli urządzenie nie jest w trybie samolotu lub nie jest dostępny w dowolnym trybie łączności sieciowej, metoda zwróci false, poza prawdą. Należy pamiętać, że jeśli powyższe scenariusze zostaną spełnione, zwróci wartość null. Do tego celu służy sprawdzenie zerowego obiektu netInfo.

public boolean isOnline() { 
ConnectivityManager conManager = 
    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = conManager .getActiveNetworkInfo(); 
if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
    return true; 
} 
return false; 

}

Pamiętaj, aby uzyskać uprawnienia dostępu do sieci do stanu manifeście.

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
2

Proszę zapoznać poniżej:

Zrób metody, które zwracają wartość logiczną:

ConnectivityManager connectivityManager; 
    NetworkInfo wifiInfo, mobileInfo; 

    public Boolean checkNow(Context con){ 
    try{ 
     connectivityManager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE); 
     wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     if(wifiInfo.isConnected() || mobileInfo.isConnected()) 
     { 
      return true; 
     } 
    } 
    catch(Exception e){ 
     System.out.println("CheckConnectivity Exception: " + e.getMessage()); 
    } 

    return false; 
} 

użyć powyższej metody w Metodzie onCreate() jak poniżej:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     boolean con = checkNow(getApplicationContext()); 

     if(con){ 
      Toast.makeText(getApplicationContext(), "Connection Founded", Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(getApplicationContext(), "Connection Not Founded", Toast.LENGTH_SHORT).show(); 
     } 

} 

kiedy uruchom aplikację, którą wyświetlisz jako "Connection Founded", jeśli masz połączenie z internetem w urządzeniu, w przeciwnym razie wyświetli się monit "Connection Not Founded".

Powiązane problemy