public abstract void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
componentName:组件名称
newState:组件新的状态,可以设置三个值,分别是如下:
不可用状态:COMPONENT_ENABLED_STATE_DISABLED
可用状态:COMPONENT_ENABLED_STATE_ENABLED
默认状态:COMPONENT_ENABLED_STATE_DEFAULT
flags:行为标签,值可以是DONT_KILL_APP或者0。 0说明杀死包含该组件的app
这个函数的用法:设置组件的enable status
这个函数的英文注释: Set the enabled setting for a package component (activity, receiver, service, provider). This setting will override any enabled state which may have been set by the component in its manifest(http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting%28android.content.ComponentName,%20int,%20int%29 )
为什么要关闭组件?
在用到组件时,有时候我们可能暂时性的不使用组件,但又不想把组件kill掉,比如创建了一个BroadcastReceiver广播监听器,用来想监听 第一次开机启动后获得系统的许多相关信息,并保存在文件中,这样以后每次开机启动就不需要再去启动该服务了,也就是说如果没有把receiver关闭掉, 就算是不做数据处理,但程序却还一直在后台运行会消耗电量和内存,这时候就需要把这个receiver给关闭掉。
如何关闭组件?
只要创建packageManager对象和ComponentName对象,并调用packageManager对象的setComponentEnabledSetting方法。关闭组件,例如:
PackageManager pacman = context.getPackageManager();
pacman.setComponentEnabledSetting(new ComponentName(context, HomeActivity.class),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
注意:
如果设置一个app的mainActivity为COMPONENT_ENABLED_STATE_DISABLED状态,禁用组件,
1. 让应用程序在主菜单[launcher]程序列表中动态隐藏(COMPONENT_ENABLED_STATE_ENABLED 为显示)
2. 调用app的setComponentEnabledSetting改变了/data/system/packages.xml 文件中
<package name="你的app的包名"
<enabled-components>
<item name="包名.xxActivity" />
</enabled-components>
</package>
eg.
<package>
<package name="com.xxx.xxx" codePath="/system/app/xxx.apk" nativeLibraryPath="/data/app-libxxx" flags="4767301" ft="140109d5890" it="140109d5890" ut="140109d5890" version="1" userId="10056">
<sigs count="1">
<cert index="1" />
</sigs>
</package>
相关推荐
例如,你可以使用以下代码片段隐藏图标: ```java public void hideAppIcon(Context context) { PackageManager packageManager = context.getPackageManager(); ComponentName componentName = new ...
`<activity-alias>`是AndroidManifest.xml文件中的一个特殊组件,它可以作为Activity的别名,拥有自己的图标和启动标签。当我们启动一个别名Activity时,实际上就是在启动被别名指向的真实Activity。因此,通过创建...
- 使用PackageManager的setComponentEnabledSetting()方法暂时禁用再启用应用组件,这通常会触发Launcher重新加载该应用的图标。 - 如果是自定义Launcher,可以直接调用其提供的接口或服务来刷新指定应用的图标。 ...
`android:icon="@mipmap/app_logo"`定义了别名的图标,`android:targetActivity=".MainActivity"`指定了别名启动的真实Activity。初始状态下,`android:enabled="false"`表示别名Activity默认是禁用的。 当需要更换...
在上述代码中,`MainActivity.class`是你的主Activity,`COMPONENT_ENABLED_STATE_DISABLED`表示禁用当前组件,实际上就是隐藏原来的图标。接着,你可以设置新的图标并启用新的组件。 4. **使用activity-alias**:...