How to enable and disable a component?

Solution 1:

By using package manager you can enable or disable component declared in manifest file There are two flag PackageManager.COMPONENT_ENABLED_STATE_DISABLED for disable component and PackageManager.COMPONENT_ENABLED_STATE_ENABLED for enable component.

PackageManager pm = getApplicationContext().getPackageManager();
ComponentName componentName = new ComponentName("com.app",
    ".broadcast_receivers.OnNetworkChangedReceiver");
pm.setComponentEnabledSetting(componentName,
    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
    PackageManager.DONT_KILL_APP);

Android manifest:

<receiver
  android:name=".broadcast_receivers.OnNetworkChangedReceiver"
  android:enabled="true"
>
  <intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  </intent-filter>
</receiver>

Official documentation: setComponentEnabledSetting

Solution 2:

taking Pawan approach to more generic implementation:

public static void setComponentState(Context context, String packageName , String componentClassName, boolean enabled)
{
    PackageManager pm  = context.getApplicationContext().getPackageManager();
    ComponentName componentName = new ComponentName(packageName, componentClassName);
    int state = enabled ?  PackageManager.COMPONENT_ENABLED_STATE_ENABLED :  PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
    pm.setComponentEnabledSetting(componentName,
            state,
            PackageManager.DONT_KILL_APP);

}