studio permission permisos name internet example editar androidmanifest android xamarin broadcastreceiver android-broadcastreceiver

permission - Android: obtenga una referencia a un BroadcastReceiver definido en Manifest



permisos internet android manifest (2)

Al registrar un BroadcastReceiver en el manifiesto, está registrando la clase, no una instancia de la misma. Cada vez que se produce una emisión que su <receiver> necesita manejar, se crea una nueva instancia para hacerlo, por lo que no puede obtener una referencia a uno como está describiendo.

Está perfectamente bien instanciar dinámicamente y registrar una instancia de una clase Receptor que también ha registrado estáticamente en el manifiesto. Sin embargo, señalaría que si la clase estáticamente registrada se va a ejecutar de todos modos, es decir, si va a manejar las mismas transmisiones que la registrada dinámicamente, puede considerar simplemente notificar su Activity de la clase Receptor, por ejemplo, con LocalBroadcastManager , otra implementación de bus de evento, etc., en lugar de esencialmente duplicar Receptores.

¿Hay alguna forma de obtener una referencia para un BroadcastReceiver definido en Manifest.xml del código?

En mi caso, estamos utilizando un BroadcastReceiver que debe incluirse en el Manifest.xml. Sin embargo, tiene una funcionalidad que me gustaría reutilizar desde nuestro código. Entonces, en lugar de crear otro BroadcastReceiver similar e instanciarlo desde el código, me gustaría obtener una referencia al existente.

Información Adicional:

Mi objetivo es suscribirme a un evento en mi BroadcastReceiver de mi actividad, un evento que me gustaría reutilizar. En lugar de crear otra instancia de este receptor en mi actividad, me gustaría obtener una referencia a la existente.


No es necesario ''obtener una referencia'' a BroadcastReceiver que ya está registrado.

Simplemente envíe Intent que pueda ser manejado por ese BroadcastReceiver para activar su acción desde cualquier punto del código donde tenga un Context .

context.sendBroadcast(intent);

Si desea llamar a ''lógica pura'' sin llamar a BroadcastReceiver , tiene que extraer la lógica de él a alguna clase POJO y llamar a esa clase directamente omitiendo BroadcastReceiver .

class LocationReceiver extends BroadcastReceiver { private SomeAction action; public LocationReceiver(){ action = new SomeAction(); } @Override public void onReceive(Context context, Intent intent) { action.execute(); } };

BroadcastReceiver puede simplemente execute() pero no sabe nada sobre cómo funciona. Puede reutilizar SomeAction en cualquier parte de su código sin tener conocimiento alguno sobre BroadcastReceiver .

Intenta evitar poner una lógica dentro de las clases de Android.

Es mejor tener lógica en las clases POJO Java porque ayuda a mantener vivo el principio SRP y facilita las pruebas.