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);