广播发送
Android 在发送广播时的方法 sendBroadcast(Intent)。
①:Intent myIntent = new Intent();——【创建Intent对象】
②:myIntent.setAction(String)——【设置一般的要执行的动作。参数:动作一个动作的名称,如ACTION_VIEW。应用程序的具体行动,应与供应商的包名作为前缀。】
③:myIntent.putExtra(String,Object)——【广播中额外发送的数据,String为自定义key,Object表示多种数据类型】
④:sendBroadcast(myIntent);——【发送广播】
接收广播
Android在接收广播的方法是注册一个广播接收器 registerReceiver(MyReceiver,IntentFilter)。
①:首先创建MyReceiver类(类名自定义) 继承 BroadcastReceiver类。——【创建广播接收器】
②:在MyReceiver中重写public void onReceive(Context context, Intent intent)方法。这个方法在接收到广播后触发。——【重写处理方法】
③:在Activity或者Service启动时 onCreate()、onStartCommand()等方法中实例化 MyReceiver类——【启动时实例化广播接收器】
④:IntentFilter filter = new IntentFilter();——【创建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也就不存在了。