2013-05-16 9 views
14

Chciałbym wiedzieć, dlaczego wifi jest podłączone, ale nie ma dostępu do Internetu w systemie Android. Jak mogę to sprawdzić? Mój kod to:Jak sprawdzić połączenie Wi-Fi, ale brak dostępu do Internetu w Androidzie

ConnectivityManager cn=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo nf=cn.getActiveNetworkInfo(); 

if(nf != null && nf.isConnected()) 
     { 
      Flag2=false; 
      Log.e("network--------", "1--------------"); 

      if (cn.getActiveNetworkInfo().isConnectedOrConnecting()) 
      {Log.e("network--------", "11111111111111--------------"); 
      } 
      else 
      {Log.e("network--------", "2222222222222--------------"); 
      } 
     } 

else 
     { 
      Log.e("network--------", "2--------------"); 
} 
+0

check out [this link] (http://stackoverflow.com/a/16437075/2345913) – CRUSADER

+0

remove == true in ur if condition – Sam

+1

@Sam to jest zbieranie nitów, będzie działało dobrze z '== true '. – Logan

Odpowiedz

18

Można spróbować czegoś takiego:

public void checkOnlineState() { 
    ConnectivityManager CManager = 
     (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo NInfo = CManager.getActiveNetworkInfo(); 
    if (NInfo != null && NInfo.isConnectedOrConnecting()) { 
     if (InetAddress.getByName("www.xy.com").isReachable(timeout)) 
     { 
     // host reachable 
     } 
     else 
     {  
     // host not reachable 
     } 
    } 
    return; 
} 

nie zapomnij dostępu

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

nadzieję, że będzie to działało :)

+0

Myślę, że jedynym realnym sposobem sprawdzenia, czy Internet działa, jest próba dostępu do niego, tak jak sugeruje ta odpowiedź. – Logan

+0

Dziękuję za pomoc, ale chcę ją stosować w każdej sekundzie i nie chcę stracić więcej danych z Internetu, mimo wszystko dzięki. –

+0

Użyłem tego z metodą Async –

1
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo info = manager.getActiveNetworkInfo(); 
     if (info != null && info.isAvailable()) { 
      return true; 
     } 
     return false; 
+1

Nie działa, już próbowałem dzięki. –

3

użyj tego

public static boolean isInternetOn(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     // test for connection 
     if (cm.getActiveNetworkInfo() != null 
       && cm.getActiveNetworkInfo().isAvailable() 
       && cm.getActiveNetworkInfo().isConnected()) { 
      Log.v(TAG, "Internet is working"); 
      // txt_status.setText("Internet is working"); 
      return true; 
     } else { 
      // txt_status.setText("Internet Connection Not Present"); 
      Log.v(TAG, "Internet Connection Not Present"); 
      return false; 
     } 
    } 
2

Oprócz tego, co robisz teraz, można użyć BroadcastReceiver dla aplikacji, aby otrzymywać powiadomienia o każdej zmianie łącznością rejestrując <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> intencji. Aby uzyskać szczegółowy opis, zapoznaj się z dokumentami: BroadcastReceiver i Connectivity Monitoring.

Mam nadzieję, że będzie to pomocne!

Powiązane problemy