文档章节

BroadcastReceiver

 小牛仔
发布于 2015/02/06 17:10
字数 909
阅读 32
收藏 1

一. 广播发送
1. 发送者分为两种:
<1>. 系统广播,只能由Android系统发出,action的定义如下:
ACTION_TIME_TICK    系统时间已经改变。该事件每分钟被广播一次,只能通过动态注册BroadcastReceiver来响应。
ACTION_TIME_CHANGED    系统时间被设置
ACTION_TIMEZONE_CHANGED   系统时区被改变
ACTION_BOOT_COMPLETED     系统启动完成
ACTION_PACKAGE_ADDED     新的应用程序被安装
ACTION_PACKAGE_CHANGED   应用程序被改变
ACTION_PACKAGE_REMOVED   应用程序被卸载
ACTION_PACKAGE_RESTARTED   应用程序被重新启动
ACTION_PACKAGE_DATA_CLEARED   应用程序数据被清空
ACTION_UID_REMOVED    用户ID被删除
ACTION_BATTERY_CHANGED   电量改变
ACTION_POWER_CONNECTED   外接电源被连通
ACTION_POWER_DISCONNECTED  外接电源被断开
ACTION_SHUTDOWN      系统关闭

<2>. 用户自定义广播
两种类型:
普通广播:完全异步,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,并且无法中断广播的传播。通过sendBroadcast(intent)来发送。
有序广播:广播接收者将按预先声明的优先级依次接收Broadcast。在onReceiver()中,广播不会传播到下一个接收者,此时当前的广播接收者可以abortBroadcast()终止广播继续向下传播,也可以将intent中的数据进行修改设置,然后将其传播到下一个广播接收者。
通过sendOrderedBroadcast()来发送。

2. 发送方式:
把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后调用Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法把Intent对象以广播方式发送出去。

二. 广播接收:
1. 接收广播的两种方式:
<1>.静态注册
广播接收者就是一个常驻在系统中的全局监听器,无论应用是否处于运行状态,广播接收者都是已经常驻在系统中了。
只要调用PackageManager将Receiver禁用就销毁掉这个广播接收者。
这种模式适合于这样的场景:某事件发生 -> 通知Broadcast -> 启动相关处理应用。
<receiver android:name=".BootBroadcastReceiver" >
    <intent-filter>
        <!-- 自定义action的命名规则一般建议为:包名.intent.类名  -->
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

接收器:

public class BootBroadcastReceiver extends BroadcastReceiver {
    String RECEIVED = "android.intent.action.BOOT_COMPLETED";// action 名称
    public void onReceive(Context context, Intent intent) {
       if (intent.getAction().equals( RECEIVED )) {
       }
    }
}

<2>.动态注册:
通常是在OnResume事件中通过registerReceiver进行注册,在 OnPause等事件中通过unregisterReceiver反注册,通过这种方式使其能够在运行期间保持对相关事件的关注。
如果应用退出后,没有撤销已经注册的接收者应用应用将会报错。
其模式可以归结为:启动应用 -> 监听事件 -> 发生时进行处理。

// 定义Action
public static String RECEIVED_ACTION = "android.intent.action.MY_BROADCAST_ACTION";
// 定义接收器
private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) { 
 if (intent.getAction().equals( RECEIVED_ACTION )) {
        } 
    }
};
 
// 注册接收器
protected void onResume(){
    super.onResume();
    IntentFilter intentFilter = new IntentFilter( RECEIVED_ACTION );
    registerReceiver( myBroadcastReceiver, intentFilter);
}
// 注销接收器
protected void onPause(){
    super.onRause();
    unregisterReceiver( myBroadcastReceiver );
}

// 发送广播
Intent intent = new Intent();
intent.setAction(RECEIVED_ACTION);
sendBroadcast(intent);

2. 接收回调方法:
一个BroadcastReceiver可以处理多个广播消息,具体做法为在onReceive()方法调用Intent参数的getAction判断传进来的动作,即可进行不同的处理。
不要创建子线程处理业务,因为它的生命周期很短。正确的处理方法就是通过intent启动Activity作为响应,或者通过NotificationMananger提醒用户,或者启动Service等。

3. 广播接收的顺序:
有序广播:优先级高的先接收;同优先级的动静态广播接收器,动态优先于静态。
普通广播:无视优先级,动态广播接收器优先于静态广播接收器。

© 著作权归作者所有

粉丝 0
博文 34
码字总数 35169
作品 0
成都
私信 提问
BroadcastReceiver—简介

Android BroadcastReceiver 简介 在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 活动(Activity) - 用于表现功能 服务(Service) - 相当于后台运行的 Activity 广播(Br......

zt1212
2012/10/12
220
0
Android插件化原理解析——广播的管理

在Activity生命周期管理 以及 插件加载机制 中我们详细讲述了插件化过程中对于Activity组件的处理方式,为了实现Activity的插件化我们付出了相当多的努力;那么Android系统的其他组件,比如B...

weishu
2016/05/13
0
0
Android之广播接收者(1)

Android系统的四大组件之:BroadcastReceiver,这种组件本质上就是以后总全局的监听器,用于监听系统全局的广播消息。由于BroadcastReceiver是一宗全局的监听器,因此它可以非常方便的实现系统...

晨曦之光
2012/05/16
1K
0
Android 四大组件(四)BroadcastReceiver

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/75449100 Andorid四大组件Activity、Service、ContentProvider都已经总结了,详情可以参考如下: Android 四大组件(一...

VNanyesheshou
2017/07/20
0
0
BroadcastReceiver—使用(III)

生命周期   描述了 Android 中广播的生命周期,其次它并不像 Activity 一样复杂,运行原理很简单如下图: 生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报错。  ...

zt1212
2012/10/12
203
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
8
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部