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