web-dev-qa-db-fra.com

Comment vérifiez-vous la connexion Internet dans Android?

Je veux vérifier la connectivité Internet dans chaque activité. S'il est perdu, un message devrait être affiché.

Quelqu'un peut-il me guider pour y parvenir?

58
UMAR

Vous pouvez utiliser ConnectivityManager pour vérifier l'état du réseau.

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
}

Notez que les constantes ConnectivityManager.TYPE_MOBILE et ConnectivityManager.TYPE_WIFI représentent des types de connexion et que ces deux valeurs ne sont pas exhaustives. Voir ici pour une liste exhaustive.


Assurez-vous également que vous disposez des autorisations requises pour surveiller l'état du réseau. Vous devez ajouter cette autorisation à votre AndroidManifest.xml:

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
62
Dan

Une seule connexion peut être active à un moment donné. Donc, une réponse plus simple est:

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
} 

Il s'adresse également à tout nouveau type de réseau tel que ConnectivityManager # TYPE_WIMAX


Assurez-vous également que vous disposez des autorisations requises pour surveiller l'état du réseau. Vous devez ajouter cette autorisation à votre AndroidManifest.xml:

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
124
William

Vous pouvez le faire pour différents types d’état de réseau

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

}
10
mainu

Vous pouvez vérifier la couverture réseau et la disponibilité des données de Mobile et wi-fi directement avec

Pour couverture du réseau 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()));

}

Pour Disponibilité des données si réseau disponible 

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()));
}
6
Amar Gore

Correction

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

devrait être

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

Enregistrez un récepteur de radiodiffusion sur handle CONNECTIVITY_ACTION. Voir cet exemple complet . Vous devez mettre à jour une variable statique 'connectionAvailable' qui sera accessible partout et à tout moment via son getter respectif.

N'oubliez pas de déclarer le récepteur de diffusion dans le fichier manifest:

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

En ce qui concerne la vérification de chaque activité, vous voudrez peut-être utiliser une BaseActivity étendue par vos activités et gérer le test de connectivité et afficher le message.

Notez également que les événements using (qui ne sont pas interrogés à partir d’activités) seront plus efficaces.

3
caligari

Vous n'utilisez pas correctement ConnectivityManager.getNetworkInfo(0).getState() et ConnectivityManager.getNetworkInfo(1).getState() au lieu de coder en dur les valeurs (1) et (0), utilisez ConnectivityManager.TYPE_WIFI et ConnectivityManager.TYPE_MOBILE

1
Naskov

Ceci est une vérification booléenne pour voir si vous avez un accès réseau. Il ne détermine pas quel type d'accès au réseau - mobile, wifi ..., il vérifie simplement si vous êtes en ligne.

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...
}  
0
VikingGlen