本节学习广播的分类。 广播分为无序广播和有序广播

无序广播:

广播发送者的action与广播接收者的action都匹配的话,所以广播介绍者都可以收到这条广播,并且没有先后顺序,可以认为是同时收到

有序广播:

广播发送者的action与广播接收者的action都匹配的话,所以广播介绍者都可以收到这条广播,但是有先后顺序,高优先级的先收到

既然知道什么是无序广播和有序广播后, 那我们举例说明:
那我们模拟生活中一个例子说明。 某高校正在举行体操比赛。这时候我们伟大的计算机学院就开会了。 院长将几个班级的导员开会完,导员又组织各个班的班长开会,最后各个班级的班长给大家传达会议精神。

我们假设: 某某某高校校长是这次广播的发送者,计算机学院的院长,导员和各个班的班长是广播接收者

先用无序广播举例:
第一: 创建校长应用程序,也就是广播的发送者:

public class PresidentActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void sendBroadcast(View v){Intent intent = new Intent();intent.setAction("com.demo.SPORT_MEET_SPIRIT");intent.putExtra("SPORT_MEET", "每个学生早上7点必须上早操");sendBroadcast(intent);}
}

第二: 创建计算机学校院长接收者,也就是广播的接收者

public class ComputerPresidentReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString spirit = intent.getExtras().getString("SPORT_MEET");Log.i("TeacherReceiver", "校长说: "+spirit);}}

第三:创建导员接收者,也就是广播的介绍者

public class TeacherReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String spirit = intent.getExtras().getString("SPORT_MEET");Log.i("TeacherReceiver", "院长说: "+spirit);}
}

第三:创建最不听话的计算机同学接收者,也就是广播的接收者:

public class StudentReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub//得到广播的数据String spirit = intent.getExtras().getString("SPORT_MEET");//显示Log.i("StudentReceiver", "导员说: "+spirit);}
}

此时清单文件中配置为:

        <receiver android:name="com.demo.broadcastreceiveractivity.ComputerPresidentReceiver"><intent-filter ><action android:name="com.demo.SPORT_MEET_SPIRIT"></action></intent-filter></receiver><receiver android:name="com.demo.broadcastreceiveractivity.TeacherReceiver"><intent-filter ><action android:name="com.demo.SPORT_MEET_SPIRIT"></action></intent-filter></receiver><receiver android:name="com.demo.broadcastreceiveractivity.StudentReceiver"><intent-filter ><action android:name="com.demo.SPORT_MEET_SPIRIT"></action></intent-filter></receiver>

ok。当我们校长发送广播后:看看现象:

可以看到先是校长说,然后院长说,再然后是导员说。看起来好像挺有顺序的。但是我将配置文件的顺序改为:

        <receiver android:name="com.demo.broadcastreceiveractivity.StudentReceiver"><intent-filter ><action android:name="com.demo.SPORT_MEET_SPIRIT"></action></intent-filter></receiver><receiver android:name="com.demo.broadcastreceiveractivity.TeacherReceiver"><intent-filter ><action android:name="com.demo.SPORT_MEET_SPIRIT"></action></intent-filter></receiver><receiver android:name="com.demo.broadcastreceiveractivity.ComputerPresidentReceiver"><intent-filter ><action android:name="com.demo.SPORT_MEET_SPIRIT"></action></intent-filter></receiver>

学生放在最前面注册,则结果为:

这时候顺序明显不对了。 这就是无序广播的特点,对于接受没有先后顺序。这明显和实际不符合。要想做到符合就必须用有序广播

举例有序广播:

首先: 给每个广播接受者设置权限,权限是-1000到1000。其中1000的优先级最高

        <receiver android:name="com.demo.broadcastreceiveractivity.StudentReceiver"><intent-filter android:priority="500"><action android:name="com.demo.SPORT_MEET_SPIRIT"></action></intent-filter></receiver><receiver android:name="com.demo.broadcastreceiveractivity.TeacherReceiver"><intent-filter android:priority="800"><action android:name="com.demo.SPORT_MEET_SPIRIT"></action></intent-filter></receiver><receiver android:name="com.demo.broadcastreceiveractivity.ComputerPresidentReceiver"><intent-filter android:priority="1000"><action android:name="com.demo.SPORT_MEET_SPIRIT"></action></intent-filter></receiver>

其次: 发送广播的方式就的改变:

    public void sendBroadcast(View v){Intent intent = new Intent();intent.setAction("com.demo.SPORT_MEET_SPIRIT");//intent.putExtra("SPORT_MEET", "每个学生早上7点必须上早操");//发送的广播为无序广播//sendBroadcast(intent);//发送有序广播sendOrderedBroadcast(intent, null, null, null, 0, "每个学生早上7点必须上早操", null);}

然后,就每个接收者做个调整:

计算机院长把校长的话给改了,校长说计算机要当第一必须6点半起来:

public class ComputerPresidentReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub//如果发送的时候数据是通过intent发送的,就通过intent取得//String spirit = intent.getExtras().getString("SPORT_MEET");//如果不是,就是简单的字符串的话,可以通过getResultData得到String spirit = getResultData();Log.i("ComputerPresidentReceiver", "校长说: "+spirit);setResultData("每个学生早上6点半必须上早操");}}

这时候广播到导员了,导员说计算机系必须当第一,6点起来:

public class TeacherReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub//String spirit = intent.getExtras().getString("SPORT_MEET");String spirit = getResultData();Log.i("TeacherReceiver", "院长说: "+spirit);setResultData("每个学生早上6点必须上早操");}}

这时候班长传达旨意来了:

public class StudentReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub//得到广播的数据//String spirit = intent.getExtras().getString("SPORT_MEET");//显示String spirit = getResultData();Log.i("StudentReceiver", "导员说: "+spirit);setResultData("谁爱上谁上去,反正我不去!");}
}

这时候同学们就说: 谁爱上谁上去,反正我不去!

看一下运行效果:

这样校长的旨意就传达了。但是同学们到底该怎么办呢?  有一天学校的检查部门(也就是一帮臭b学生会,来检查上早操的人数)

这时候我们就需要对发送者在改造:

    public void sendBroadcast(View v){Intent intent = new Intent();intent.setAction("com.demo.SPORT_MEET_SPIRIT");//intent.putExtra("SPORT_MEET", "每个学生早上7点必须上早操");//发送的广播为无序广播//sendBroadcast(intent);//发送有序广播sendOrderedBroadcast(intent, null, new resultReceiver(), null, 0, "每个学生早上7点必须上早操", null);}//广播的最终接受者class resultReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString spirit = getResultData();Log.i("resultReceiver", "计算机上早情况:" + spirit);}}

演示效果为:

学生会一看,计算机系8点了还没人上早操,就几个胆小的去上了。

这就是有序广播,发送者发送后,第一个接受者可以对广播的内容修改,同时也可以终止广播的继续发送。但是广播的最终接受者是一定可以收到此广播的。

比如: 有一天导员比较忙,忘记了传达会议的精神

public class TeacherReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub//String spirit = intent.getExtras().getString("SPORT_MEET");String spirit = getResultData();Log.i("TeacherReceiver", "院长说: "+spirit);//由于太忙,忘了,也就不传播会议精神了abortBroadcast();//setResultData("每个学生早上6点必须上早操");}
}

结果为:

导员没有给班长传达会议精神,同学们也没收到, 当然也没人去上早操。但是学生会还是会说到最终的广播消息的。

注意:  如果你发送的是无序广播的话,使用abortBroadcast();是无法终止广播的传送的,对无序广播是没有用的。 同样setResultData也是对无序广播没有用的。

这个大家可以试试。

Android 四大组件学习之BroadcastReceiver三相关推荐

  1. android四大组件之Activity(三)

    这是一篇关于android开发四大组件Activity部分的笔记之一,其中主要介绍Activity的生命周期以及一些实例等内容.这里所用到的开发工具是Android4.1. 目录 14.Activit ...

  2. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  3. android进阶(九)-----Android四大组件的工作过程

    一.四大组件的运行状态 android四大组件中国除了BroadcastReceiver以外,其他三种都必须在AndroidManifest中注册,对于BroadcastReceiver既可以在And ...

  4. Android四大组件系列7 Broadcast广播机制(上)

    一 概述 广播 (Broadcast) 机制用于进程或线程间通信,广播分为广播发送和广播接收两个过程,其中广播接收者 BroadcastReceiver 是 Android 四大组件之一.Broadc ...

  5. Android四大组件之——Broadcast学习总结

    1.Broadcast概念 是一个全局的监听器,属于Android四大组件之一.Broadcast(广播)是一种广泛运用的在应用程序(APP)之间传输信息的机制.而BroadcastReceiver( ...

  6. Android四大组件之BroadCastReceiver

    1. 基本概念 在Android 中,Broadcast 是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver 是对发送出来的Broadcast 进行过滤接受并响应的一类 ...

  7. Android四大组件---BroadcastReceiver

    前言: BroadcastReceiver(广播接收器),属于 Android 四大组件之一 在 Android 开发中,BroadcastReceiver 的应用场景非常多 今天,我将详细讲解关于B ...

  8. android 广播的权限,Android四大组件详解之BroadcastReceiver广播接收者

    Android四大组件详解---BroadcastReceicer广播接收者 广播有两个角色,一个是广播发送者,另一个是广播接收者. 广播按照类型分为两种,一种是全局广播,另一种是本地广播 全局广播: ...

  9. Android 四大组件通信核心

    前言 系列文章: Android Activity创建到View的显示过程 Android 四大组件通信核心 Android 系统启动到App 界面完全展示终于明白(图文版) 我们知道Android ...

  10. Android四大组件总结

    四大组件系列文章 Activity总结和补充:Activity总结和补充_fdsafwagdagadg6576的博客-CSDN博客 Android Binder&Aidl理解和补充:Andro ...

最新文章

  1. SAP RETAIL MM42里可以顺便维护一下Source List
  2. Linux上端口开放常用命令
  3. android studio如何生成混淆代码的jar
  4. 【ArcGIS微课1000例】0011:ArcGIS空间查询(按位置选择Select by Location)完全案例详解
  5. [转载] python numpy np.finfo()函数 eps
  6. Apache2如何提高并发连接请求数量
  7. amos里CFA可行性辨别结果怎么看_本科毕业论文做问卷和数据分析应该怎么着手?(1)...
  8. VR游戏与传统游戏开发区别 和 Unite 2016关于VR/AR的消息
  9. 2021年Flash被禁用后继续使用的方法
  10. android设置闹钟组件,Android 设置系统闹钟
  11. Ubuntu环境下制作win7-U盘引导盘
  12. 网络安全之暴力破解win7密码
  13. Command CompileAssetCatalog emitted errors but did not return a nonzero exit code to indicate failur
  14. U盘中的文件夹都变成了.exe文件
  15. 换挡周期下,谁将成为厨电品牌的进取者?
  16. 一篇文章普及各种ios基本知识
  17. 职场礼仪常识、职场注意事项
  18. 择偶标准与黑名单了解一下
  19. PPPoE与802.1X在校园网中的应用分析
  20. K-means均值聚类算法python代码实现

热门文章

  1. checkbox:全选、全不选、单选(慕课网题目)
  2. 如何使用SVG生成超酷的页面预加载素描动画效果
  3. Smith Builder ERP代码生成器(开源,提供源码下载)
  4. Asp.Net水晶报表边框不显示之解决方法
  5. 使用DirectPlay进行网络互联(1)
  6. redis之列表字典操作
  7. 医疗保健行业未来发展的5大趋势预测
  8. flex布局——回顾
  9. linux挂在Windows操作系统共享文件夹
  10. 【iphone】 如何将app发布到appstore中