13

我最初的问题基本上是这样的:Clearing and setting the default home application

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

4

2 回答 2

24

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

安卓清单:

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

官方文档:setComponentEnabledSetting

于 2013-07-01T17:11:49.867 回答
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);

}
于 2016-09-04T08:22:59.157 回答