当前位置: 代码迷 >> Android >> Android : setComponentEnabledSetting,组件禁用跟隐藏启动图标
  详细解决方案

Android : setComponentEnabledSetting,组件禁用跟隐藏启动图标

热度:47   发布时间:2016-04-28 05:44:47.0
Android : setComponentEnabledSetting,组件禁用和隐藏启动图标

? ? ? ? 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>

  相关解决方案