`

设置组件状态--如何动态关闭manifest中的Receiver

阅读更多
为什么要关闭组件?
在用到组件时,有时候我们可能暂时性的不使用组件,但又不想把组件kill掉,比如创建了一个broadcastReceiver广播监听器,用来想监听第一次开机启动后获得系统的许多相关信息,并保存在文件中,这样以后每次开机启动就不需要再去启动该服务了,也就是说如果没有把receiver关闭掉,就算是不做数据处理,但程序却还一直在后台运行会消耗电量和内存,这时候就需要把这个receiver给关闭掉。

如何关闭组件?
关闭组件其实并不难,只要创建packageManager对象和ComponentName对象,并调用packageManager对象的setComponentEnabledSetting方法。方法描述如下:
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。

上个小例子。manifest文件中的配置:
<receiver android:name=".ToggleReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>

在对应的Receiver中的处理:

final ComponentName receiver = new ComponentName(context,
ToggleReceiver.class);
final PackageManager pm = context.getPackageManager();
count++;
if (count > 1) {
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);

当读取完一次数据后,就把recevier组件设置成不可用状态,以达到效果。

分享到:
评论

相关推荐

    Android中四大组件

    在Android操作系统中,四大组件是构建应用程序的核心元素,它们分别是Activity、Service、Content Provider和Broadcast Receiver。这四个组件各自承担不同的职责,共同构成了Android应用的基本架构。 1. Activity...

    新版Android开发教程.rar

    • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • 集成的浏览器 基于开源的 WebKit 引擎 • 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 ...

    安卓基础资料连载七

    - 记得在Manifest中添加必要的权限,否则Receiver可能无法正常工作。 通过理解和掌握BroadcastReceiver的使用,开发者可以创建出响应系统事件、设备状态变化或其他应用广播的应用,极大地扩展了Android应用的功能和...

    安卓文献android外文翻译(android中英文献)

    根据给定文件的部分内容,我们可以深入探讨Android应用程序的基础知识、应用程序组件以及其他相关概念。下面将对这些内容进行详细的解析。 ### 1. 应用程序基础 #### 1.1 应用程序组件 Android应用程序的核心是其...

    Android的广播Receiver动态注册和静态注册示例

    在Android开发中,广播Receiver是实现应用程序间通信和系统服务通知的一种重要机制。本文将深入探讨Android广播Receiver的动态注册和静态注册,并通过实例展示它们的差异和应用场景。 首先,让我们了解广播Receiver...

    Android开发指南中文版

    组件可以通过多种方式关闭,例如Activity可以通过调用`finish()`方法结束自身。 **manifest文件** 每个Android应用程序都需要一个配置文件,即AndroidManifest.xml,用于声明应用程序的所有组件、权限等信息。 **...

    2011Android技术面试整理附有详细答案(包括百度、新浪、

    - 为了防止Activity被系统回收时丢失状态,可以在`onSaveInstanceState()`方法中保存状态,在`onRestoreInstanceState()`方法中恢复状态。 #### 23. 设置Activity为窗口样式 - 可以通过修改`AndroidManifest.xml`...

    android广播

    而对于静态注册的Receiver,可以在设置单个应用的首选项或在Activity的onPause()中动态禁止接收广播。 最后,我们提到了一个名为"BroadcastRecDemo_v1"的文件,这可能是用于演示BroadcastReceiver功能的代码示例。...

    android源码

    - AndroidManifest.xml中的权限声明:每个应用必须在manifest文件中声明所需的权限,系统根据这些声明决定是否授予相应权限。 - SELinux:从Android 4.3开始引入,增强了系统的安全性,限制了进程的权限。 6. **...

    安卓声波通讯耳机相关-Android利用广播接收器检测用户是否插入耳机.rar

    在Android开发中,有时我们需要根据用户是否插入耳机来调整应用的行为,例如切换音频播放模式或者控制界面布局。这个"安卓声波通讯耳机相关-Android利用广播接收器检测用户是否插入耳机.rar"压缩包中可能包含了一个...

    android常见的面试题

    - **在代码中动态注册**:使用`registerReceiver()`方法。 #### 23. 请介绍下ContentProvider是如何实现数据共享的。 **ContentProvider** 提供了一种跨应用访问数据的方式。它定义了一组标准接口,使得一个应用...

    android开发中文指南

    在Android中,应用程序是由一系列组件构成的,这些组件包括活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供者(Content Provider)。每个组件都有其特定的功能和生命周期,它们可以...

    toast demo

    例如,要在manifest中注册一个接收网络状态改变的receiver: ```xml &lt;receiver android:name=".NetworkChangeReceiver"&gt; &lt;intent-filter&gt; &lt;/intent-filter&gt; &lt;/receiver&gt; ``` 2. 动态注册(在代码中): 动态...

    Android_广播通知机制r.pdf

    缺点是增加了应用的启动开销,且无法在运行时动态控制接收器的激活状态。 ```xml &lt;receiver android:name=".IncomingSMSReceiver"&gt; &lt;intent-filter&gt; &lt;/intent-filter&gt; &lt;/receiver&gt; ``` **监听短信接收** ...

Global site tag (gtag.js) - Google Analytics