Android中的广播机制
来源:互联网 发布:2017软件评测师真题 编辑:程序博客网 时间:2024/05/08 15:49
一.简介
日常生活中,广播机制很常见。最普遍的例子就是收音机了。下面来分析一下收音机的整个机制:收音机里的电台播放内容,不过它只负责播放内容,并不关心关于广播的接收,处理等工作。而我们则调到我们感兴趣的电台进行收听。Android中的广播机制也是如此,发送方只负责发送数据,关于数据的接收,处理都由接收方决定,与发送方无关。Android中广播的是各种OS发生的事件,比如接收短信,电量低等等,而具体的处理是有广播接收器来执行。广播机制是很有用的,比如对照片的大头贴处理,对来电的黑名单处理等都用到了广播。
二.广播流程
1.由程序员开发BroadcastReceiver,即广播接收器。这个类决定了接收的事件怎么处理。
2.在Manifest.xml里注册BroadcastReceiver。
3.当Android系统发生事件,则会给所有的BroadcastReceiver广播该事件。
4.BroadcastReceiver做判断(匹配action),若匹配,则触发相应的动作。
三.代码示例
1.编写BroadcastReceiver
public class MyReceiver extends BroadcastReceiver{ //MyReceiver类继承了BroadcastReceiver
public MyReceiver() { //构造函数
System.out.println("MyReceiver");
}
@Override
public void onReceive(Context context, Intent intent) { //onReceive方法就是定义了接收广播后执行的操作
// TODO Auto-generated method stub
System.out.println("onReceive");
}
}
2.注册
关于BroadcastReceiver的注册有两种方法:在xml里直接注册和在程序代码中注册。
(1)在Manifest.xml中直接注册。
<receiver android:name="com.share.SMSReceiver"> //用receiver 标签来注册广播接收器,name即名字。
<intent-filter> //过滤器
<action android:name="android.provider.Telephony.SMS_RECEIVED"/> //通过定义action,决定了该接收器接受哪种事件的广播。
//当广播到来时进行过滤,通过匹配action,
//若一致,则触发。
//关于action的值,系统提供许多常量来对应相应的事件,
//在之后作介绍。这里的action对应的是接收短信。
</intent-filter>
</receiver>
这种方法的特点是即使关闭了应用程序,接收仍然在继续。缺点是在某些情况下会造成浪费,比如更新UI的操作,Activity未启动的时候进行更新是没有必要的,会造成电池电量,CPU等的浪费。
(2)在代码中注册
注册:
MyReceiver myReceiver=new MyReceiver(); //创建MyReceiver接收器的对象
IntentFilter filter=new IntentFilter(); //IntentFilter对象,其实就对应了第一种方法里的 <intent-filter>。
filter.addAction(SMS_ACTION); //给IntentFilter 添加相应的action,表明该receiver过滤的事件。
BroadcastActivity.this.registerReceiver(myReceiver, filter); //注册。将receiver和filter作为参数传进去进行注册。
注销:
BroadcastActivity.this.unregisterReceiver(myReceiver); //参数即要注销的接收器对象。
这种方法的特点是只有程序开启的时候才接收,非常适合用于UI更新等操作。
3.广播
广播有可能是系统发生的事件,比如来短信,来电,电量低等事件,也可以由程序触发广播事件。
Intent intent=new Intent (); //新建Intent 对象
intent.setAction(Intent.ACTION_EDIT); //设置Intent的action,这个action的值就用来和接收器的filter中action的值做匹配。
BroadcastActivity.this.sendBroadcast(intent); //将intent事件广播。
四.几点说明
1.Receiver对象的生命周期
一旦onReceive返回,则结束该对象,所以每次接收广播,都会新生成一个Receiver对象。
2.Intent
广播机制中的Intent与负责传输的Intent是不一样的。特点是它将动作(action)与数据(data)分开了。就好比洗衣服这件事。动作是“洗”,数据是“衣服”,你当然可以改变数据,将“衣服”变成“脸”。
3.Android内置的Broadcast Actions
例:
ACTION_BARRERY_LOW:电量低。
ACTION_SCREEN_ON:屏幕被打开。
ACTION_DATE_CHANGED:日期改变。
此外还有很多,具体可查帮助文档。
- Android 中的广播机制
- Android中的广播机制
- android中的广播机制
- android中的广播机制
- Android中的广播机制
- android中的广播机制
- Android中的广播机制
- Android中的广播机制
- day04 Android中的广播机制(广播接收器)
- android中的广播退出机制broadcast
- Android 中的消息传递,详解广播机制
- Android 中的消息传递-广播机制
- Android 中的消息传递,详解广播机制
- Android中的广播机制(一)----- 接收广播
- Android中的广播机制(二)----- 发送广播
- Android深入浅出系列之广播机制—Android中的广播机制(一)
- Android深入浅出系列之广播机制—Android中的广播机制(二)
- Android深入浅出系列之广播机制—1-Android中的广播机制
- strtok CString 分割字符串
- 下文件之前获取到文件大小的代码
- android 合成两张图片,上层图片设置透明度
- win7系统连接vss服务器,但是就是记不住凭证.
- 11 java 王少飞-防止表单重复提交
- Android中的广播机制
- CreateDIBSection及位图结构
- Java设计模式构造型之适配器模式
- pdc 与 hdc 转换
- 自定义消息
- Session
- tomcat配置
- vc6 使用richedt2.dll的两种方法
- Android Alert Dialog解决点击按钮对话框不关闭的问题