2010-02-24 16 views
57

Voglio verificare la connettività Internet in ogni attività. Se viene perso, dovrebbe essere visualizzato un messaggio.Come controllate la connessione internet in Android?

Qualcuno può guidarmi come raggiungere questo obiettivo?

+0

Questo può aiutare alcune http://www.gadgetsaint.com/android/no-internet-connectivity-android/ – ASP

risposta

61

È possibile utilizzare ConnectivityManager per verificare lo stato della rete.

ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

if (conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED 
    || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) { 

    // notify user you are online 

} 
else if (conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED 
    || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) { 

    // notify user you are not online 
} 

noti che le costanti ConnectivityManager.TYPE_MOBILE e ConnectivityManager.TYPE_WIFI rappresentano tipi di connessione e questi due valori non sono esaustivi. Vedere here per un elenco completo.


Assicurarsi inoltre di disporre dell'autorizzazione necessaria per monitorare lo stato della rete. È necessario aggiungere questa autorizzazione al AndroidManifest.xml:

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

che mi sta dando seguente errore ConnectivityService: Né utente 10026 né processo in corso ha android.permission.ACCESS_NETWORK_STATE. su conMgr.getNetworkInfo – UMAR

+28

Devi aggiungere questa linea al tuo AndroidManifest.xml:

+2

ok una cosa che ho notato. Quando la connessione wifi è connessa al modem wireless, la copertura internet è presente oppure no, dice sempre sì, si è connessi controlla solo la connettività wifi e non la connettività Internet, quindi come gestire una situazione del genere? – UMAR

5

Correzione

if (conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED 
    || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ) { 
    //notify user you are online 
} 

dovrebbe essere

if (conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED 
    || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) { 
    //notify user you are online 
} 
+1

ok una cosa che ho notato .. quando la connessione wifi è connessa alla connessione internet del modem wireless c'è o non sempre dice sì si è connesso controlla solo la connettività wifi e non la connettività internet così come gestire una situazione del genere ? – UMAR

120

solo una connessione può essere attivo in qualsiasi punto. Quindi, una risposta più semplice è:

final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo(); 
if (activeNetwork != null && activeNetwork.isConnected()) { 
    // notify user you are online 
} else { 
    // notify user you are not online 
} 

Si rivolge anche per ogni nuovo tipo di rete, come ConnectivityManager # TYPE_WIMAX


anche assicurarsi di avere l'autorizzazione necessaria per monitorare lo stato della rete. È necessario aggiungere questa autorizzazione al AndroidManifest.xml:

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

Migliore risposta. +1 –

+0

C'è un nome di metodo 'isConnected()' per le informazioni di rete che può sostituire la tua riga '.getState() == ...' e renderla ancora più semplice? – bytebender

+0

Bella ripresa #bytebender. Ho modificato la soluzione. Ancora più semplice :-) – William

10

Si può fare questo, di vari tipi di stato della rete

public void checkNetworkStatus(){ 

    final ConnectivityManager connMgr = (ConnectivityManager) 
    this.getSystemService(Context.CONNECTIVITY_SERVICE); 

    final android.net.NetworkInfo wifi = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    final android.net.NetworkInfo mobile = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if(wifi.isAvailable()){ 

    Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show(); 
    } 
    else if(mobile.isAvailable()){ 

    Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show(); 
    } 
    else 
    { 

     Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show(); 
    } 

} 
6

È possibile controllare la copertura della rete e la disponibilità dei dati di Mobile e wi- fi direttamente con

Per una copertura di rete disponibilità,

private boolean isNetworkAvailable() 
{ 
ConnectivityManager conxMgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); 

NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

return ((mobileNwInfo== null ? false : mobileNwInfo.isAvailable()) || (wifiNwInfo == null ? false : wifiNwInfo.isAvailable())); 

} 

Per informazioni sulla disponibilità dati se di rete disponibile

private boolean isDataAvailable() 
{ 
    ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 

NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

return ((mobileNwInfo== null? false : mobileNwInfo.isConnected())|| (wifiNwInfo == null? false : wifiNwInfo.isConnected())); 
} 
1

non si utilizza ConnectivityManager.getNetworkInfo(0).getState() e ConnectivityManager.getNetworkInfo(1).getState() correttamente, invece di hardcoding i valori (1) e (0) utilizzare ConnectivityManager.TYPE_WIFI e ConnectivityManager.TYPE_MOBILE

0

Questo è un valore booleano controlla se hai accesso alla rete. Non determina il tipo di accesso alla rete - mobile, wifi ..., controlla solo se sei online.

boolean mobileNwInfo = false; 
ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
try { mobileNwInfo = conxMgr.getActiveNetworkInfo().isConnected(); } 
catch (NullPointerException e) { mobileNwInfo = false; } 
if (mobileNwInfo == false) { 
    // Your code goes here... 
} 
3

Registrare un ricevitore broadcast per maniglia CONNECTIVITY_ACTION. Vedi questo full example.Dovresti aggiornare una variabile statica 'connectionAvailable' che sarà accessibile ovunque e ogni volta attraverso il rispettivo getter.

Ricordate di dichiarare il ricevitore di broadcast nel file manifest:

<receiver android:name=".NetworkConnectivityReceiver" android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
    </intent-filter> 
</receiver> 

In materia di 'check-in ogni attività', può essere che si sarebbe interessato a utilizzare un BaseActivity prorogato di vostre attività e gestione del test di connettività e visualizzazione del messaggio.

Inoltre, notare che utilizzando eventi (non eseguire il polling dalle attività) sarà più efficiente.

Problemi correlati