1.广播的类型:

  • 标准广播(Normal broadcast)是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此他们之间没有先后顺序。效率比较高,但是不能被截断。
  • 有序广播(Ordered broadcast)是一种同步执行的广播,在广播发出之后,同一时刻只能有一个广播接收器能收到消息,当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递。优先级高的广播接收器就会先收到消息,并且可以截断正在传递的广播,这样后面的广播接收器就收不到消息了。

还可以分为系统广播和本地广播:

  • 系统全局广播:发出的广播可以被其他任何应用程序接收到,也可以接收到来自其他任何应用程序的广播。
  • 本地广播:为了解决系统广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能在应用程序内部进行传递,广播接收器也只能接收来自本应用程序发出的广播。但是已经被弃用了。
    This class is deprecated.
    LocalBroadcastManager is an application-wide event bus and embraces layer violations in your app: any component may listen events from any other. You can replace usage of LocalBroadcastManager with other implementation of observable pattern, depending on your usecase suitable options may be LiveData or reactive streams.

2.广播的使用

新建项目BroadcastTest项目

(1)动态注册
  • 创建广播接收器,继承BroadcastReceiver,重写父类的onReceive()方法
  • 创建IntentFilter的实例,添加值为想要监听的广播的action
  • 创建广播接收器的实例,调用registerReceiver()方法进行注册
  • 取消注册,动态注册的广播接收器需要取消注册
  • 声明权限:在AndroidManifest.xml文件中加入权限
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
public class MainActivity extends AppCompatActivity {private IntentFilter intentFilter;private NetworkChangeReceiver networkChangeReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//创建IntentFilter的实例,添加值为想要监听的广播的actionintentFilter = new IntentFilter();intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//创建广播接收器的实例,调用registerReceiver()方法进行注册networkChangeReceiver = new NetworkChangeReceiver();registerReceiver(networkChangeReceiver,intentFilter);}
//取消注册,动态注册的广播接收器需要取消注册@Overrideprotected  void  onDestroy() {super.onDestroy();unregisterReceiver(networkChangeReceiver);}
//创建广播接收器,继承BroadcastReceiver,重写父类的onReceive()方法class NetworkChangeReceiver extends BroadcastReceiver {@Overridepublic void onReceive (Context context,Intent intent) {Toast.makeText(context, "network changes ", Toast.LENGTH_SHORT).show();}}
}
(2)静态注册
  • 创建广播接收器(可以使用快捷方式)

    • 右击com.example.broadcasttest包->New->Other->Broadcast Receiver。Exported属性表示是否允许这个广播接收器接收本程序以外的广播,Enabled属性表示是否启用这个广播接收器。勾选这两个属性,点击Finish。
  • 注册广播:静态的广播接收器需要在AndroidManifest.xml文件中注册
    由于是快捷方式创建的广播接收器,注册会自动完成。所有的静态广播都是在application标签内的receiver标签里注册的
<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.BroadcastTest"><receiver//具体注册哪个广播android:name=".MyBroadReceiver"//刚刚勾选的属性android:enabled="true"android:exported="true"></receiver>
  • 添加需要监听的广播值
<receiverandroid:name=".MyBroadReceiver"android:enabled="true"android:exported="true"><intent-filter>//添加需要监听的广播值<action android:name="com.example.broadcasttest.MY_BROADCAST" /></intent-filter></receiver>
  • 声明权限:在AndroidManifest.xml文件中加入权限
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

3.发送自定义广播

3.1.发送标准广播
  • 创建静态的广播接收器
  • 在布局中定义Button,作为发送广播的出发点
  • 在button的点击事件里加入发送自定义广播的逻辑。
    • 创建Intent对象,传入要发送的广播值
    • 调用sendBroadcast()方法将广播发送出去
  @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent  = new Intent("android.net.conn.CONNECTIVITY_CHANGE");sendBroadcast(intent);}});}
3.2.发送有序广播

在发送标准广播的基础上修改即可:

  • 发送有序广播
    sendOrderedBroadcast()方法接收两个参数,第一个参数是intent,第二个参数是与权限相关的字符串,这里传入null。
 sendOrderedBroadcast(intent,null);
  • 在注册的时候定义优先级
    通过android:priority属性给广播接收器设置优先级
 <receiverandroid:name=".MyBroadReceiver"android:enabled="true"android:exported="true"><intent-filter android:priority="100"><action android:name="com.example.broadcasttest.MY_BROADCAST" /></intent-filter></receiver>
  • 是否截断广播
    在广播接收器中的onReceiver()方法中调用abortBroadcast()方法,表示将这条广播截断,后面的广播接收器就无法接收这条广播。
public class MyBroadReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();abortBroadcast();}
}

广播(Broadcast)相关推荐

  1. B08_NumPy 广播(Broadcast)

    NumPy 广播(Broadcast) 广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b ...

  2. Android中的广播Broadcast详解

    今天来看一下Android中的广播机制,我们知道广播Broadcast是Android中的四大组件之一,可见他的重要性了,当然它的用途也很大的,比如一些系统的广播:电量低.开机.锁屏等一些操作都会发送 ...

  3. Android 广播(Broadcast)

    Android 广播Broadcast 1.小声嘀咕 2.广播机制简介 3.接收系统广播 3.1动态注册 3.2静态注册 4.发送自定义广播 4.1标准广播 4.2有序广播 5.使用本地广播 1.小声 ...

  4. 无线广播(Broadcast)

    无线广播(Broadcast) Description A broadcaster wants to set up a radio broadcast transmitter in an area. ...

  5. 网络层:单播unicast 组播multicast 广播broadcast

    当前的网络中有三种通讯模式:单播.广播.组播(多播),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景. 一.单播unicast: 主机之间"一对一"的通讯模式,网 ...

  6. NumPy 广播(Broadcast)与pandas基础知识

    文章目录 NumPy 广播(Broadcast) 控制遍历顺序 修改数组中元素的值 使用外部循环 广播迭代 Numpy 数组操作 修改数组形状 umpy.ndarray.flat umpy.ndarr ...

  7. 【Tsinghua】无线广播(broadcast)

    一个BFS. 无线广播(broadcast) 描述 某广播公司要在一个地区架设无线广播发射装置.该地区共有n个小镇,每个小镇都要安装一台发射机并播放各自的节目. 不过,该公司只获得了FM104.2和F ...

  8. 品茗论道说广播(Broadcast内部机制讲解)(上)

    品茗论道说广播(Broadcast内部机制讲解)(上) 侯 亮 1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制.从易用性的角度来说,使用广播是非常简单的.不过,这个 ...

  9. PA7题解报告——无线广播(Broadcast)

    数据结构与算法实验2020夏第二批(中国石油大学) PA7题解报告--无线广播(Broadcast) 目录 题目描述 题目分析 编码实现 一.题目描述 1. 描述 某广播公司要在一个地区架设无线广播发 ...

  10. 无线广播(Broadcast)【1】

    无线广播(Broadcast) https://dsa.cs.tsinghua.edu.cn/oj/course.shtml?courseid=59 描述 某广播公司要在一个地区架设无线广播发射装置. ...

最新文章

  1. 16年寒假随笔(2)
  2. 原生js cookie本地存储
  3. java cookbook 3_CookBook/Java核心/3-Java反射.md at master · zhgdbut/CookBook · GitHub
  4. linux 服务管理
  5. 如何在JavaScript中检查变量是否为整数?
  6. 中间件配置文件-nginx
  7. 系统架构升级建议书(1)
  8. lcd1602c语言程序分析,LCD1602 C程序
  9. 基于WebRTC搭建直播系统源码
  10. 传感器i2c与arduino连接_ARDUINO的I2C通信详解 - arduino读取I2C总线上连接设备的地址...
  11. Delta对冲:模拟实验
  12. 揭秘!物联网卡代理的三大骗局
  13. 小程序_OTA升级的一些情况说明
  14. ubuntu18.04安装更新adobe flash player
  15. Master of Data Structure 虚树
  16. MyBatis的由来
  17. canvas + JavaScript实现幸运大转盘
  18. nginx下强制跳转到www域名,域名重定向
  19. tools:ignore=Suspicious0dp
  20. 鼠标悬停时,图片切换的方法

热门文章

  1. 索尔维会议记录软件测试,TBBT第4季2集:索尔维会议(附视频)
  2. 第一期:利用旧手机搭建网盘(家庭nas)
  3. 计算机网络中常见的交换机和路由器的品牌
  4. java多线程 丢数据_多线程list.add()丢数据
  5. 一些乱七八糟的概念以及定义
  6. Mdserver-web:一个开源、免费的 Linux 主机面板
  7. XinChaCha Trust SSL Organization Validated
  8. NC6报销单外部交换平台报错“表头总金额与财务页签金额合计不一致“
  9. android密码是小黑点,Android自定义密码样式 黑点转换成特殊字符
  10. 网页设计作业-个人博客