38 votes

Action d'intention pour les événements réseau dans Android sdk

J'ai besoin de recevoir des diffusions pour des actions réseau telles que réseau connecté, déconnecté, etc. J'utilise un récepteur de diffusion à cette fin. J'utilise un récepteur de diffusion à cette fin. Quelqu'un peut-il me dire quelle action intentionnelle je dois capturer pour les événements de réseau ? Android.net.ConnectivityManager.CONNECTIVITY_ACTION .

Voici ma classe de récepteur de radiodiffusion :

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class NetworkStateReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

    if (intent.getAction().equals(
            android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {

        // do something..
    }
}
}

et j'ai également ajouté la permission d'accéder à l'état du réseau :

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

voici comment j'ai déclaré cette classe dans le fichier manifeste

<receiver class=".NetworkStateReceiver" android:name=".NetworkStateReceiver">
    <intent-filter>
            <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
    </intent-filter>
</receiver>

S'il vous plaît, suggérez-moi la bonne action à entreprendre si je me trompe OU s'il y a une autre façon d'attraper les événements du réseau.

51voto

yanchenko Points 24142

Voici un exemple concret :

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

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

.

public class ConnectivityReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(ConnectivityReceiver.class.getSimpleName(), "action: "
                + intent.getAction());
    }

}

5voto

Ravi K. Sharma Points 310

La réponse de yanchenko est très utile, je simplifie juste un peu pour obtenir le statut de la connexion, veuillez modifier onReceive comme ci-dessous :

public class ConnectivityReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
      Log.d(ConnectivityReceiver.class.getSimpleName(), "action: "
            + intent.getAction());
      MyConstants.IS_NETWORK_AVAILABLE = haveNetworkConnection(context);
      //IS_NETWORK_AVAILABLE this variable in your activities to check networkavailability.

  } 

  private boolean haveNetworkConnection(Context context) {
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager)   context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }
    return haveConnectedWifi || haveConnectedMobile;
}

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X