Me gustaría saber cuál es la mejor práctica / forma de registrar mediante programación un receptor de transmisión. Quiero registrar receptores específicos según la elección del usuario.
Como el registro se realiza a través del archivo de manifiesto, me pregunto si hay una manera adecuada de lograr esto en el código.
android
broadcastreceiver
CoolStraw
fuente
fuente
Respuestas:
Parece que desea controlar si los componentes publicados en su manifiesto están activos, no registrar dinámicamente un receptor (a través de Context.registerReceiver ()) mientras se ejecuta.
Si es así, puede usar PackageManager.setComponentEnabledSetting () para controlar si estos componentes están activos:
http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)
Tenga en cuenta que si solo está interesado en recibir una transmisión mientras se está ejecutando, es mejor usar registerReceiver (). Un componente receptor es principalmente útil para cuando necesita asegurarse de que su aplicación se inicia cada vez que se envía la transmisión.
fuente
En su
onCreate
método, puede registrar un receptor como este:Recuerde ejecutar esto en el
onDestroy
método:fuente
onDestroy()
se llamará, creando así una posible pérdida de memoria. Es mejor registrarse / cancelar el registro enonStart()
/onStop()
.Un punto importante que la gente olvida mencionar es el tiempo de vida del
Broadcast Receiver
. La diferencia de registrarlo programáticamente con respecto al registro en AndroidManifest.xml es esa. En el archivo de manifiesto, no depende del tiempo de vida de la aplicación. Mientras que al registrarlo programáticamente depende del tiempo de vida de la aplicación. Esto significa que si se registra en AndroidManifest.xml , puede captar las intenciones emitidas incluso cuando su aplicación no se está ejecutando.Editar: la nota mencionada ya no es cierta a partir de Android 3.1, el sistema Android excluye a todos los receptores de recibir intenciones de forma predeterminada si el usuario nunca ha iniciado la aplicación correspondiente o si el usuario la detuvo explícitamente a través del menú de Android (en Gestionar → Aplicación). https://developer.android.com/about/versions/android-3.1.html
Esta es una característica de seguridad adicional ya que el usuario puede estar seguro de que solo las aplicaciones que inició recibirán intenciones de transmisión.
Por lo tanto, puede entenderse que los receptores registrados mediante programación en la aplicación
onCreate()
tendrían el mismo efecto que los declarados en AndroidManifest.xml de Android 3.1 anterior.fuente
Defina un receptor de difusión en cualquier lugar de Actividad / Fragmento como este:
Definir IntentFilter en
onCreate()
Ahora registre el BroadcastReciever en
onResume()
y anule el registro enonPause()
[porque no hay uso de la transmisión si la actividad está en pausa].Para un tutorial detallado, eche un vistazo al receptor de transmisión: dos formas de implementarlo .
fuente
fuente
Según escuchar y transmitir mensajes globales y configurar alarmas en tareas comunes y cómo hacerlas en Android :
Eche un vistazo a registerReceiver (receptor BroadcastReceiver, filtro IntentFilter) para obtener más información.
fuente
context.registerReceiver
pero no se llama, ¿puedes mirar esta pregunta? stackoverflow.com/questions/13238600/…Es una buena práctica proporcionar siempre el permiso al registrar el receptor; de lo contrario, recibirá cualquier solicitud que envíe una intención coincidente. Esto puede permitir que las aplicaciones maliciosas se transmitan a su receptor.
fuente
para LocalBroadcastManager
y registrarse en
onResume
y anular el registro
onStop
y recíbelo ..
donde IntentFilter es
fuente
Dos opciones
registerReceiver(...
) enonStart()
yunregisterReceiver(...)
enonStop()
registerReceiver(...)
dentroonCreate(...)
yunregisterReceiver(...)
dentroonDestroy()
Prima:
Si no desea escribir código repetitivo para registrar y anular el registro de un BroadcastReceiver una y otra vez en cada Actividad, entonces,
Aquí está el fragmento de código:
Ver código completo:
AQUÍ
fuente
Crear un receptor de difusión
[BroadcastReceiver (Habilitado = verdadero, Exportado = falso)]
Desde su actividad agregue este código:
fuente