Broadcast

来源:互联网 发布:淘宝上找不到卖家中心 编辑:程序博客网 时间:2024/04/30 00:17
BroadcastReceiver
BroadReceiver顾名思义就是广播接收者,用于接收来自系统和应用中的广播。
Android系统中,广播的应用非常广泛,例如:开机完成后会产生一条广播,接收到这条广播就能实现开机启动服


务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电


池量改变时,系统会产生一条广播,接收到这条广播告知用户及时保存进度,等等。
Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,只需等待广播告知自己就可以了,


大大减少了开发的工作量和开发周期。
Android系统的广播模拟广播电台的广播机制,首先由一方发送广播,其次定义一个BroadcastReceiver对象,该对


象用来接收发送的广播
Android用字符串模拟电台的频率,当出现一个广播时,同时在Intent对象中设置Action字符串,该字符串可看作


是该广播的频率。
广播接收者需要Activity和Service那样在项目清单中注册,注册的方式与intent.action的字符串值相同。这样发


送和接收者通过Action属性就处在同一频段上了。
BroadcastReceiver是抽象类。


注册BroadcastReceiver
注册BroadcastReceiver有两种方式
1.在项目清单文件中注册
示例代码:
<receiver android:name=".ReceiverAndroid">
<intent-filter>
<action android:name="liuke.RECEIVE_ANDROID"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
提示:
在项目清单中注册的广播时常驻型的。当应用关闭后,如有广播消息传来,Receiver也会被系统调用而自动执行。
2.Java代码中注册
MyReceiver receiver=new MyReceiver();//创建一个自定义的MyReceiver类的一个对象
IntentFilter filter=new IntentFilter();
filter.addAction("liuke.mybroadcast");
regeisterReceiver(receiver,filter);
说明:
1.以上代码的第2,3行相当于<intent-filter>标签的功能,创建过滤器并设置过滤条件
2.第4行是注册广播接收者
提示:
1.registerReceiver是android.content.ContextWrapper类中的方法,Activity和Service都继承了


ContextWrapper,所以可以直接调用。在实际应用中,若在Activity或Service中注册了一个BroadcastReceiver,


当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示是否忘记解除注册了。所以,建


议在onStop、onDestroy等生命周期方法中将代码注册的广播解除注册,如下代码所示
protected void onStop(){
super.onStop();
unregiter();
}
private void unregister(){
if(MyReceiver!=null){
unregisterReceiver(mReceiverJava);
mReceiverJava=null;
}
}
2.代码注册方式与项目清单中注册不同,它不是常驻型的,即广播岁组件的生命周期。


常用方法:
1.Boolean isOrderedBroadcast()
作用:若是有序广播则返回true,若是无序广播则返回false
2.absortBroadcast();
作用:终止广播,优先级低的广播接收者将无法得到当前的广播
3.setResultExtras(Bundle bundle)
作用:修改数据并发送给优先级低的接收者
示例代码:
Bundle bundle=new Bundle();
bundle.putString("msg","第二个广播接收者接到了广播")
setResultExtras(bundle);
以上代码将字符串一键值对的形式保存在Bundle对象中,并通过setResultExtras方法发送给优先级低的广播接收


者。
void setResultData(String data)
作用:重载的方法
参数data:发送给优先级低的接收者的字符串
4.int getResultCode();
作用:返回前一个接收者返回结果码
5.String getResultCode();
Bundle getResultExtras(boolean markMap)
作用:获取优先级高的接收者发送的数据
参数markMap:值为true时,当上一个将广播接收者的setResultExtras参数为null,则getResultExtras获取的


Bundle对象是一个有地址但内容为空的集合
markMap值为false时,则getResultExtras获取的对象是null。
6.public abstract void onReceive(Context context,Intent intent)
作用:该方法必须有子类实现,当接收到广播时将回调本方法。
参数context:发送广播的组件对象
参数intent:发送广播的组件对象发送过来的Intent对象。该题图对象可封装传递过来的数据
提示:onReceive方法中不能执行超过10秒的耗时操作,否则将出现异常。


四、相关方法:
1.public void sendBroadcast(Intent intent)
作用:发送广播。
说明:
该方法是android.content.ContextWrapper类中的方法,带一个Intent类型的参数
2.public Intent registerReceiver(BroadcastReceiver receiver,Intentfilter filter)
作用:注册广播接收者
参数receiver:被注册的广播接收者对象
参数filter:封装action的过滤器对象
3.public void unregisterReceiver(BroadcastReceiver receiver)
作用:取消广播接收者的注册
提示:registerReceiver()和UNregisterReceiver()均是用于Java代码注册广播接收者。


IntentFilter类
1.概述:
IntentFilter类用于代码注册广播接收者,该类的作用相当于项目清单文件中的<Intent-filter>
2.常用方法:
public final void addAction(String action)
作用:向过滤器对象添加action属性
参数action:该属性相当于清单文件中<intent-filter>标签中的<action>子标签



1 0
原创粉丝点击