【记录】Android(安卓)广播的发送与接收
Android 广播的发送与接收
广播发送
Android在发送广播时的方法sendBroadcast(Intent)。
①:IntentmyIntent=newIntent();——【创建Intent对象】
②:myIntent.setAction(String)——【设置一般的要执行的动作。参数:动作一个动作的名称,如ACTION_VIEW。应用程序的具体行动,应与供应商的包名作为前缀。】
③:myIntent.putExtra(String,Object)——【广播中额外发送的数据,String为自定义key,Object表示多种数据类型】
④:sendBroadcast(myIntent);——【发送广播】
接收广播
Android在接收广播的方法是注册一个广播接收器registerReceiver(MyReceiver,IntentFilter)。
①:首先创建MyReceiver类(类名自定义)继承BroadcastReceiver类。——【创建广播接收器】
②:在MyReceiver中重写publicvoidonReceive(Contextcontext,Intentintent)方法。这个方法在接收到广播后触发。——【重写处理方法】
③:在Activity或者Service启动时onCreate()、onStartCommand()等方法中实例化MyReceiver类——【启动时实例化广播接收器】
④:IntentFilterfilter=newIntentFilter();——【创建IntentFilter对象意图过滤器】
⑤:filter.addAction(String);——【在过滤器中加入过滤条件,说明接收什么广播】
⑥:registerReceiver(cmdReceiver,filter);——【注册广播,参数为(广播接收器,意图过滤器)】
对比Android系统广播的相关知识,列出下面一张思维导图(导图来至网络http://www.cnblogs.com/mandroid/archive/2011/02/27/1966569.html):
过程分析参考:
http://blog.csdn.net/luoshengyang/article/details/6737352
http://blog.csdn.net/luoshengyang/article/details/6744448
广播基本介绍:
(1)广播消息发送是用BroadcastReceiver类,在android.content包下。在需要发消息的地方创建一个Intent对象,将信息的内容和用于过滤的信息封装起来,通过以下三种方法将该Intent对象广播出去:Context.sendBroadcast方法; Context.sendOrderedBroadcast方法; Context.sendStickyBroadcast方法;
三种方法的区别如下:senBroadcast或sendStickyBroadcast发送出去的Intent,所有满足条件的BroadcastReceiver都会执行其onReceive方法。但若有多个满足条件的BroadcastReceiver,其执行onReceive方法的顺序是没有保证的。
而通过sendOrderedBroadcast方法发送出去的Intent,会根据BroadcastReceiver注册时IntentFilter设置的优先级的顺序来执行onReceive方法,相同的优先级的BroadcastReceiver执行onReceive方法的顺序是没有保证的。
sendStickyBroadcast主要的不同是,Intent在发送后会一直存在,并且在以后调用registerReceiver注册相匹配的Receiver时会把这个Intent对象直接返回给新注册的Receiver。
(2)广播消息接收通过IntentFilter对象来进行过滤。只需对BroadcastReceiver的onReceive回调方法进行合理重写,在适当的地方注册该BroadcastReceiver即可。
注册的方式,有两种:
一是在AndroidManifest.xml中声明。在<receiver></receiver>标签中,并在<intent-filter>标签内设定过滤规则;
二是在代码中创建并设置IntentFilter对象。该IntentFilter对象包含了对广播的过滤规则,然后在需要的的地方调用Context.registerReceiver方法和Context.unregisterReceiver方法进行注册和取消注册,该方法,当Context对象被销毁时,该BroadcastReceiver也就不存在了。
更多相关文章
- 关于android设备唯一区分device id的取得
- Android入门之addWindow
- 关于使用AccountManager的remove删除Android帐号的细节
- Android(安卓)WebView属性及用法
- 关于android全屏截图,无需root,无状态栏,2个方法
- 通过EventBus更换android app主题
- Android(安卓)闹钟 开发过程记录(二)
- 编译源码生成的SDK,创建android project 没有proguard.cfg问题
- android之monkeyrunner学习二