Cómo manipular los receptores de transmisión a pedido

La forma más sencilla de controlar los cambios en el estado del dispositivo es crear un BroadcastReceiver para cada estado que controles y registrar cada uno de ellos en el manifiesto de tu aplicación. Luego, dentro de cada uno de esos receptores, simplemente tienes que reprogramar las alarmas recurrentes en función del estado actual del dispositivo.

Un efecto secundario de este método consiste en que tu app despertará al dispositivo cada vez que uno de estos receptores se active (probablemente, con más frecuencia de la necesaria).

Una forma mejor de hacerlo es inhabilitar o habilitar los receptores de emisión durante el tiempo de ejecución. De esta manera, puedes utilizar los receptores que hayas declarado en el manifiesto como alarmas pasivas que se activan por eventos del sistema solo cuando es necesario.

Cómo activar o desactivar y superponer receptores de cambio de estado para mejorar el rendimiento

Puedes utilizar el PackageManager para activar o desactivar el estado habilitado en cualquier componente definido en el manifiesto, incluidos los receptores de emisión que quieras habilitar o inhabilitar, como se muestra en el siguiente fragmento de código:

ComponentName receiver = new ComponentName(context, myReceiver.class);

PackageManager pm = context.getPackageManager();

pm.setComponentEnabledSetting(receiver,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP)

Al utilizar esta técnica, si determinas que la conectividad se ha perdido, puedes inhabilitar todos tus receptores excepto el receptor de cambio de conectividad. Por el contrario, cuando estés conectado, puedes dejar de detectar cambios de conectividad y solo comprobar si estás conectado inmediatamente antes de realizar una actualización y de reprogramar una alarma de actualización recurrente.

Puedes usar la misma técnica a fin de posponer una descarga que requiera un ancho de banda superior para completarse. Solo debes habilitar un receptor de transmisión que detecte los cambios de conectividad e inicie la descarga únicamente cuando estés conectado a una red Wi-Fi.