2013-05-16 10 views
14

Vorrei sapere perché il wifi è collegato ma non c'è accesso a Internet in Android. Come posso controllarlo? Il mio codice è:Come verificare che il Wi-Fi sia collegato, ma non l'accesso a Internet in Android

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 [questo collegamento] (http://stackoverflow.com/a/16437075/2345913) – CRUSADER

+0

rimuovere == true in ur se condizione – Sam

+1

@Sam che è nit picking, funzionerà bene con il '== true '. – Logan

risposta

18

si potrebbe provare qualcosa di simile:

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; 
} 

non dimenticare l'accesso

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

spero che funzionerà :)

+0

Penso che l'unico vero modo per vedere se Internet funziona è provare effettivamente ad accedervi, come suggerisce questa risposta. – Logan

+0

Grazie per l'aiuto ma voglio applicare questo su ogni secondo e non voglio perdere più dati Internet dell'utente, comunque grazie mille. –

+0

L'ho usato con il metodo Async –

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

Non funziona, ho già provato comunque grazie. –

3

usa questo

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

In aggiunta a ciò che si sta facendo in questo momento, è possibile utilizzare BroadcastReceiver per la vostra applicazione per essere avvisato ogni volta che i cambiamenti di connettività per la registrazione <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> intenti.

Dai un'occhiata alla documentazione: BroadcastReceiver e Connectivity Monitoring per una descrizione dettagliata.

Spero possa essere utile!

Problemi correlati