web-dev-qa-db-fra.com

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

J'ai besoin de recevoir des diffusions pour des actions réseau comme le réseau connecté, déconnecté, etc. J'utilise un récepteur de diffusion à cet effet. Quelqu'un peut-il me dire quelle action d'intention je dois capturer pour les événements du réseau, en ce moment selon ma recherche sur Internet que j'utilise Android.net.ConnectivityManager.CONNECTIVITY_ACTION.

Voici ma classe de récepteur de diffusion:

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>

Veuillez me suggérer la bonne action d'intention si je me trompe OR s'il y a un autre moyen d'attraper les événements du réseau.

38
mudit

Voici un exemple de travail:

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

}
51
yanchenko

la réponse de yanchenko est très utile, je simplifie juste un peu pour obtenir l'état 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;    
    }
}
5
Ravi K. Sharma