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
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
- Obtener el identificador de SMS del receptor de difusión
- Cómo enviar BroadCast desde una aplicación a otra aplicación
- Una forma de obtener desbloquear evento en android?
- ¿Qué permiso debe requerir mi receptor SMS de manejo de entrada del sistema?
- No puede recibir eventos relacionados con la red
- Compruebe la conexión a Internet de INTENT
- ¿Por qué las transmisiones de AlarmManager se cancelan cuando se cancela la aplicación?
- BroadcastReceiver vs Servicio
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