Necesito verificar si mi receptor registrado todavía está registrado, de lo contrario, ¿cómo puedo verificarlo?
254
Necesito verificar si mi receptor registrado todavía está registrado, de lo contrario, ¿cómo puedo verificarlo?
Respuestas:
No estoy seguro de que la API proporcione directamente una API, si considera este hilo :
fuente
No hay una función API para verificar si un receptor está registrado. La solución es poner su código en un
try catch block as done below.
fuente
null
. Pero como usted señaló, voy contry catch
. Ridículo.solución más simple
en receptor:
en codigo:
anuncio 1
-- en respuesta a:
- Método agregado de "forma más elegante" en el receptor para registrar y establecer la bandera
@amin: vea la vida útil del código en el receptor registrado (no el sistema registrado por entrada de manifiesto)
fuente
Estoy usando esta solucion
fuente
Tienes varias opciones
Puedes poner una bandera en tu clase o actividad. Ponga una variable booleana en su clase y mire esta bandera para saber si tiene el receptor registrado.
Cree una clase que extienda el receptor y allí pueda usar:
El patrón Singleton solo tiene una instancia de esta clase en su proyecto.
Implemente los métodos para saber si el receptor está registrado.
fuente
Tienes que usar try / catch:
fuente
Puedes hacerlo fácil ...
1) crear una variable booleana ...
2) Cuando registre su receptor de transmisión, configúrelo como VERDADERO
3) En onPause () hazlo ...
Simplemente, y ahora, no recibirá más mensaje de error de excepción en onPause ().
Consejo 1: Utilice siempre unregisterReceiver () en onPause () no en onDestroy () Consejo2: No olvide establecer la variable bolBroadcastRegistred en FALSE cuando ejecute unregisterReceive ()
¡Éxito!
fuente
Si pones esto en el método onDestroy o onStop. Creo que cuando la actividad se ha creado nuevamente, MessageReciver no se estaba creando.
fuente
Utilicé Intención para informar a Broadcast Receiver sobre la instancia del Manejador del hilo principal de Actividad y utilicé Mensaje para pasar un mensaje a la actividad Principal
He utilizado dicho mecanismo para verificar si Broadcast Receiver ya está registrado o no. A veces es necesario cuando registra su Broadcast Receiver dinámicamente y no desea hacerlo dos veces o si presenta al usuario si Broadcast Receiver está en ejecución.
Actividad principal:
Receptor de radiodifusión:
fuente
Personalmente utilizo el método de llamar a unregisterReceiver y tragar la excepción si se produce. Estoy de acuerdo en que esto es feo, pero el mejor método proporcionado actualmente.
He planteado una solicitud de función para obtener un método booleano para verificar si un receptor está registrado agregado a la API de Android. Apóyelo aquí si desea verlo agregado: https://code.google.com/p/android/issues/detail?id=73718
fuente
Entiendo su problema, me enfrenté al mismo problema en mi aplicación. Estaba llamando a registerReceiver () varias veces dentro de la aplicación.
Una solución simple a este problema es llamar al registerReceiver () en su clase de aplicación personalizada. Esto asegurará que su receptor Broadcast se llame solo uno en todo el ciclo de vida de la aplicación.
fuente
Así es como lo hice, es una versión modificada de la respuesta dada por ceph3us y editada por slinden77 (entre otras cosas, he eliminado los valores de retorno de los métodos que no necesitaba):
Luego en una clase de actividad:
fuente
pongo este código en mi actividad principal
List createdReceivers = new ArrayList <> ();
fuente
Para mí lo siguiente funcionó:
fuente
Esto es lo que hice para verificar si la emisora ya está registrada, incluso si cierra su aplicación (terminar ())
La primera vez que ejecute su aplicación, envíe una transmisión primero, devolverá verdadero / falso, dependiendo de si su emisora sigue ejecutándose o no.
Mi locutor
Mi actividad principal
fuente
Puede usar Dagger para crear una referencia de ese receptor.
Primero proporcione:
Luego inyecte donde lo necesite (usando
constructor
o campoinjection
)y simplemente pásalo a
registerReceiver
.También póngalo en
try/catch
bloque también.fuente
fuente
Simplemente marque NullPointerException. Si el receptor no existe, entonces ...
fuente