BroadcastReceiver CONNECTIVITY_CHANGE siempre se ejecuta en la primera vez que se inicia la aplicación?
Lo leí en Google Developer:
("Android.net.conn.CONNECTIVITY_CHANGE") acción siempre que los detalles de conectividad hayan cambiado
- Llame a un método de actividad de un BroadcastReceiver. ¿Es posible?
- Utilización de un receptor de difusión como actividad de clase interna con registro de manifiesto
- AlertDialog de dentro de BroadcastReceiver ?? Se puede hacer?
- AlarmManager no siempre ejecuta BroadcastReceiver
- No se puede obtener el receptor cuando se desinstala la aplicación
Tengo este código:
Public class MainActivity extends AppCompatActivity {
private NetworkChangeReceiver receiver; private boolean connIntentFilterIsRegistered; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); receiver = new NetworkChangeReceiver(); } @Override protected void onPause() { super.onPause(); if (connIntentFilterIsRegistered) { unregisterReceiver(receiver); connIntentFilterIsRegistered = false; } } @Override protected void onResume() { super.onResume(); if (!connIntentFilterIsRegistered) { registerReceiver(receiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")); connIntentFilterIsRegistered = true; } }
Y //
Public class NetworkUtil {
public static int TYPE_WIFI = 1; public static int TYPE_MOBILE = 0; public static int TYPE_NOT_CONNECTED = 2; public static int getConnectivityStatus(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnectedOrConnecting()) { if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { return TYPE_WIFI; } if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { return TYPE_MOBILE; } } return TYPE_NOT_CONNECTED; } public static String getConnectivityStatusString(Context context) { int conn = NetworkUtil.getConnectivityStatus(context); String status = null; if (conn == TYPE_MOBILE) { status = "Mobile cellular enabled"; } else if (conn == TYPE_WIFI) { status = "Wifi enabled"; } else if (conn == TYPE_NOT_CONNECTED) { status = "Not connected to internet"; } return status; }
}
Cuando la primera vez que lanzar la aplicación, esta intención siempre disparó y mostró un diálogo con el estado actual de la red. Pero basado en este documento, sólo ocurre cuando se conecta el cambio? Si quiero esta pantalla sólo cuando la red cambia, ¿cómo puedo hacer? Muchas gracias
- BroadcastReceiver Vs WakefulBroadcastReceiver
- Android intención para sdcard listo
- ¿Hay alguna razón para continuar usando IntentService para manejar mensajes de GCM?
- Broadcast receptor onReceive () recibiendo llamadas varias veces
- Receptor de radiodifusión dinámica en fragmento
- Java.lang.IllegalArgumentException: registra demasiados receptores de difusión
- El receptor de difusión no funciona en ICS si la aplicación no se inicia al menos una vez
- Fuga de receptor de difusión administrada localmente?
La transmisión android.net.conn.CONNECTIVITY_CHANGE
es una emisión pegajosa . Esto significa que cada vez que registre un BroadcastReceiver
para esta ACTION, siempre se activará de forma inmediata y se onReceive()
con el cambio de conectividad de difusión más reciente . Esto le permite obtener el estado actual de la conectividad sin esperar a que algo cambie.
Si desea ignorar el estado actual y sólo desea procesar cambios de estado, puede agregar esto a su onReceive()
:
if (isInitialStickyBroadcast()) { // Ignore this call to onReceive, as this is the sticky broadcast } else { // Connectivity state has changed ... (your code here) }
- El cuadro de diálogo no muestra el botón positivo y negativo
- Eliminar el número especificado de filas de la base de datos SQLite