studio - Acción intencionada para eventos de red en sdk de Android
api android studio (2)
Aquí hay un ejemplo de trabajo:
<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());
}
}
Necesito recibir transmisiones para acciones de red como redes conectadas, desconectadas, etc. Estoy usando un receptor de transmisión para este propósito. ¿Puede alguien decirme qué acción de intención debo capturar para los eventos de red, ahora mismo, según mi búsqueda en Internet, estoy usando android.net.ConnectivityManager.CONNECTIVITY_ACTION .
Aquí está mi clase de receptor de difusión:
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..
}
}
}
y también he agregado permiso para acceder al estado de la red:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
aquí es cómo he declarado esta clase en el archivo de manifiesto
<receiver class=".NetworkStateReceiver" android:name=".NetworkStateReceiver">
<intent-filter>
<action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
</intent-filter>
</receiver>
Por favor sugiérame la acción correcta si estoy equivocado O si hay alguna otra manera de atrapar eventos de la red.
La respuesta de yanchenko es muy útil, solo estoy simplificando un poco para obtener el estado de la conexión, modifique onReceive como se muestra a continuación:
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;
}
}