如何启用和禁用组件?

时间:2013-07-01 17:06:49

标签: android

我最初的问题基本上与此类似:Clearing and setting the default home application

我满意地回答了这个问题,然而,我在答案中难以理解的是你如何在java代码中启用然后禁用清单中的组件?

2 个答案:

答案 0 :(得分:18)

通过使用包管理器,您可以启用或禁用在menifest文件中声明的组件 禁用组件有两个标志PackageManager.COMPONENT_ENABLED_STATE_DISABLED,启用组件有PackageManager.COMPONENT_ENABLED_STATE_ENABLED标志。

   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清单:

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

官方文件:setComponentEnabledSetting

答案 1 :(得分:1)

采用Pawan方法实现更通用的实现:

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

}