Search code examples
androidbroadcastreceiver

How to register and unregister BroadcastReceiver programmatically?


I have a Broadcast Receiver in my app:

public class Ringmodechange extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

    }
}

My AndroidManifest.xml:

<receiver
    android:name=".Ringmodechange"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.media.RINGER_MODE_CHANGED" />
    </intent-filter>
</receiver>

Is it possible to register and unregister a BroadcastReceiver with java code? This receiver is working in the background.

Actually, I want to register and unregister the receiver everytime a user clicks a button.


Solution

  • Yes, it is possible using a ComponentName and the PackageManager.


    Enabling your BroadcastReceiver:

    ComponentName component = new ComponentName(context, Ringmodechange.class)
    context.getPackageManager().setComponentEnabledSetting(component, PackageManager. COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP);
    

    To disable it:

    ComponentName component = new ComponentName(context, Ringmodechange.class)
    context.getPackageManager().setComponentEnabledSetting(component, PackageManager. COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);