Android BroadcastReceiver学习总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android BroadcastReceiver学习总结
BroadCast(广播),概念:一种在系统内进行通信的机制.通过这种机制,它能够将系统中的某个进程的信息或者意图传递到其他的对这些信息或者意图感兴趣的进程.
广播发送者:想要主动传递自己的信息或者意图给系统或者特定的接收者,以便其作出
响应.
广播接收者:想要接收系统或者特定进程的某些信息或意图,以便作出相应的响应.
Android广播机制包含三个基本要素:
广播(Broadcast)----- 用于发送广播。
广播接收器(BroadcastReceiver)----- 用于接收广播。
意图内容(Intent)----- 用于保存广播相关信息的媒介。
广播的过程:首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用Context.sendBroadcast()、Context.sendOrderBroadcast()方法,把Intent对象以广播的方式发出去。当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的Intentfilter是否与发送的Intent相匹配,若匹配就会调用BroadcastReceiver的void onReceive(Context curContext, Intent broadcastMsg)方法,onReceiver()方法执行完成后,BroadcastReceiver的实例就会销毁。
sendBroadCast():发送普通广播可以在同一时刻被所有接收者收到
优点:消息传递效率高
缺点:各个接收者之间无法通信,无法终止消息传播
sendOrderedBroadCast:发送有序广播
接收者将按预先声明的优先级依次接收广播消息优先级设置: android:priority (-1000∽1000)数越大级别越高也可调用IntentFilter对象的setPriority()设置
上一个接收者可往广播中压入数据传递给下一个接收者
任意一个接收者都可终止广播的传播,下一个就不能接收
注意:
如果找不到合适的BroadcastReceiver组件,应用不会有任何问题。
onReceiver()方法不能在10秒执行完成,会认为该进程无响应。弹出ANR(application no response)的对话框。
源代码实例如下:
发送普通广播:
Aactivity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.activity_main);
button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setAction("com.coslay.action.CUSTOM_BROADCAST");
intent.putExtra("msg","简单的消息");
sendBroadcast(intent);
}
});
}
程序启动BroadcastReceiver只需要两步:
创建需要启动的BroadcastReceiver的Intent
调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver
BroadcastReceiver:
public class CustomReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent arg1) {
Toast.makeText(arg0, "接收到的Intent的Action为:"+arg1.getAction()+"\n消息内容是:"+arg1.getStringExtra("msg"), Toast.LENGTH_LONG).show();
}
只要重写BroadcastReceiver的onReceive(Context context,Intent intent)方法即可。然后在如下注册监听器即可。
AndroidManifest.xml:
指定该BroadcastReceiver能匹配的Intent有两种方式:
1.使用代码进行指定:
IntentFilter filter = new
IntentFilter("android.provider.Telephony.SMS_RECEIVED");
SomeReceiver receiver = new SomeReceiver();
registerReceiver(receiver,filter);
2.在AndroidManifest.xml文件中配置。如上所示。
发送有序广播:
Aactivity:
button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.coslay.action.SORTED_BROADCAST");
intent.putExtra("msg", "简单的消息");
sendOrderedBroadcast(intent, null);
}
});
BroadcastReceiver:
public class SortedBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "接收到的Intent的Action为:"+intent.getAction()+"\n消息内容是:"+intent.getStringExtra("msg"), Toast.LENGTH_LONG).show();
//创建一个Bundle对象,并存入数据