Un ejemplo – Recibir difusiones del sistema

Un ejemplo – Recibir difusiones del sistema

I. Conceptos básicos de las difusiones (Broadcast)

1. Qué son las difusiones del sistema

  • Android trae integradas numerosas difusiones de nivel de sistema, para notificar los cambios de estado del sistema.
  • Difusiones del sistema habituales:
    • Batería baja / variación del nivel de batería
    • Arranque finalizado (BOOT_COMPLETED)
    • Cambio del estado de red (CONNECTIVITY_CHANGE)
    • Cambio del modo avión
    • Cambio de hora / zona horaria

2. Función del receptor de difusiones

  • La aplicación registra un receptor de difusiones para escuchar las difusiones que le interesan.
  • Cuando llega una difusión, el sistema invoca automáticamente el método onReceive() del receptor.
  • Escribe la lógica de negocio dentro del método onReceive().

II. Dos métodos de registro de difusiones

Elemento de comparación Registro dinámico (registro por código) Registro estático (registro en Manifest)
Lugar de registro Dentro de componentes como Activity / Service AndroidManifest.xml
Ciclo de vida Vinculado al componente donde se registra Independiente de los componentes; puede recibir difusiones incluso si la app no se ha iniciado
Flexibilidad Alta, se puede registrar o anular el registro en cualquier momento Baja, queda definido al instalar la aplicación
Casos de uso Difusiones que requieren conocer el ciclo de vida del componente Difusiones globales, ejecución al arranque, etc.
Restricciones en versiones nuevas Sin restricciones especiales Android 8.0+ impone muchas limitaciones a las difusiones implícitas

Importante: No se permite el registro estático para la difusión CONNECTIVITY_CHANGE (cambio de red) en Android 7.0 y superior. Es obligatorio usar el registro dinámico.

III. Crear un receptor de difusiones

Pasos básicos

  1. Crea una nueva clase que herede de BroadcastReceiver
  2. Sobrescribe el método onReceive(Context context, Intent intent)
  3. Procesa la lógica de la difusión recibida dentro de onReceive()

Código

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Procesar la lógica de la difusión
    }
}Lenguaje del código: PHP (php)

IV. Flujo completo del registro dinámico

1. Definir variables miembro

private NetworkChangeReceiver networkChangeReceiver;
private IntentFilter intentFilter;Lenguaje del código: PHP (php)

2. Registrar dentro de onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    networkChangeReceiver = new NetworkChangeReceiver();
    intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
    registerReceiver(networkChangeReceiver, intentFilter);
}Lenguaje del código: JavaScript (javascript)

3. Anular el registro en onDestroy() (¡Obligatorio!)

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(networkChangeReceiver);
}Lenguaje del código: CSS (css)

4. Definir la clase interna del receptor

class NetworkChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "La red ha cambiado", Toast.LENGTH_LONG).show();
    }
}Lenguaje del código: JavaScript (javascript)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *