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