tutorial start sendbroadcast registerreceiver oreo example connectivity_change android broadcastreceiver

sendbroadcast - start broadcast receiver android



Android: ¿cómo anular el registro de un receptor creado en el manifiesto? (2)

Sé sobre usar registerReceiver y unregisterReceiver en código Java para tratar con receptores, pero digamos que tengo lo siguiente en mi manifiesto:

<receiver android:name=".headsetHook"> <intent-filter android:priority="99999999999"> <action android:name="android.intent.action.ACTION_HEADSET_PLUG" /> </intent-filter> </receiver>

¿Hay alguna manera de anular el registro en algún lugar del código Java? ¿Podría darle un atributo de identificación o algo así y luego obtenerlo y anular el registro? Lo pido porque quiero que mi aplicación haga algo solo la primera vez que ocurre esta acción, luego lo anulo y lo vuelvo a registrar más tarde en Java.

Espero haber dejado eso en claro, gracias por cualquier ayuda.


Basado en la respuesta de Varun, he creado este método utilitario

private void unregisterReceiverFromManifest(Class<? extends BroadcastReceiver> clazz, final Context context) { final ComponentName component = new ComponentName(context, clazz); final int status = context.getPackageManager().getComponentEnabledSetting(component); if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { context.getPackageManager() .setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } }


Puede usar el PackageManager de PackageManager para habilitar / deshabilitar un BroadcastReceiver declarado en el Manifiesto. El Broadcast Receiver activará solo cuando esté habilitado.

Use esto para crear un Componente

ComponentName component = new ComponentName(context, MyReceiver.class);

Compruebe si el Componente está habilitado o deshabilitado

int status = context.getPackageManager().getComponentEnabledSetting(component); if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { Log.d("receiver is enabled"); } else if(status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { Log.d("receiver is disabled"); }

Habilitar / Deshabilitar el componente (Broadcast Receiver en su caso)

//Disable context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP); //Enable context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP);