【发布时间】:2013-06-28 21:28:54
【问题描述】:
我最初的问题基本上是这样的:Clearing and setting the default home application
这个问题的回答令我满意,但是,我在回答中难以理解的是如何在 java 代码的清单中启用和禁用组件?
【问题讨论】:
标签: android
我最初的问题基本上是这样的:Clearing and setting the default home application
这个问题的回答令我满意,但是,我在回答中难以理解的是如何在 java 代码的清单中启用和禁用组件?
【问题讨论】:
标签: android
通过使用包管理器,您可以启用或禁用清单文件中声明的组件
有两个标志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>
【讨论】:
采用 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);
}
【讨论】: