13

My initial question was basically something along the lines of this: Clearing and setting the default home application

That question was answered to my satisfaction, however, the thing I'm having difficulty understanding in the answer is how do you enable and then disable a component from the manifest in the java code?

Community
  • 1
  • 1
scibor
  • 935
  • 4
  • 10
  • 21

2 Answers2

25

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

Ben Winding
  • 7,545
  • 4
  • 62
  • 58
Pawan Yadav
  • 1,827
  • 19
  • 17
1

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

}
Noam Segev
  • 395
  • 3
  • 20