当前位置: 首页 > news >正文

第8章 广播机制

第8章 广播机制(Broadcast)

Android 广播机制用于:
系统或应用之间进行消息通信

典型例子:

  • 电量变化广播

  • 网络变化广播

  • 应用自定义广播(App 内或 App 间通信)


8.1 广播机制的概述

Android 中通信方式包括:

  • Activity 之间(Intent)

  • Service 与 Activity(绑定服务)

  • App 内或 App 间的全局消息广播(Broadcast)

广播分为两类:

  1. 系统广播(系统自动发出)

  2. 自定义广播(开发者自己发送)

广播由三个关键角色组成:

角色作用
广播发送者使用 sendBroadcast()sendOrderedBroadcast() 发送广播
广播接收者(Receiver)接收广播消息
IntentFilter匹配广播类型

8.2 广播接收者(BroadcastReceiver)

8.2.1 什么是广播接收者?

BroadcastReceiver 是 Android 四大组件之一。
主要作用:接收系统或应用发出的广播,并作出响应

例如:

  • 屏幕亮灭广播

  • 网络变化

  • 耳机插入

  • 自定义事件(如“饭堂广播”)


8.2.2 创建广播接收者(静态 + 动态注册)

📌(1)静态注册:写在 AndroidManifest.xml 中

① 新建 Receiver 类

public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String msg = intent.getStringExtra("msg");Log.d("MyReceiver", "收到广播:" + msg);}
}

② Manifest 注册

<receiver android:name=".MyReceiver"><intent-filter><action android:name="com.example.MY_BROADCAST"/></intent-filter>
</receiver>

特点

  • App 不启动也能接收

  • 常用于 BOOT_COMPLETED、电量广播等


📌(2)动态注册(在 Activity 中注册)

MyReceiver receiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.MY_BROADCAST");
registerReceiver(receiver, filter);

取消注册:

unregisterReceiver(receiver);

8.3 自定义广播与广播的类型

Android 广播可以分成 三种类型

类型特点
普通广播(sendBroadcast)异步发送,所有接收者同时接收
有序广播(sendOrderedBroadcast)有先后顺序,可拦截
粘性广播(已废弃)系统已不建议使用

8.3.1 自定义广播

自己定义 Action,然后发送广播。

发送广播

Intent intent = new Intent("com.example.MY_BROADCAST");
intent.putExtra("msg", "饭堂开饭啦!");
sendBroadcast(intent);  // 普通广播

8.3.2 实战演练——饭堂小广播

场景:
两点半,饭堂大叔发广播“今天有红烧肉!”
应用收到后 Toast 提示。


步骤 1:创建广播接收器(CanteenReceiver)

public class CanteenReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String food = intent.getStringExtra("food");Toast.makeText(context, "饭堂通知:" + food, Toast.LENGTH_SHORT).show();}
}

步骤 2:Manifest 注册

<receiver android:name=".CanteenReceiver"><intent-filter><action android:name="canteen.open"/></intent-filter>
</receiver>

步骤 3:按钮点击 → 发送广播

Intent intent = new Intent("canteen.open");
intent.putExtra("food", "今日红烧肉已开餐!");
sendBroadcast(intent);

运行效果:
点击按钮 → 弹出 Toast:饭堂通知:今日红烧肉已开餐!


8.4 广播的类型(详细说明)

8.4.1 普通广播(普通 sendBroadcast)

  • 异步

  • 所有 Receiver 同时收到

  • 不能拦截

sendBroadcast(intent);

8.4.2 有序广播(sendOrderedBroadcast)

特点:

  • 按优先级排序

  • 前一个广播可以终止广播继续传递

  • 可以修改广播内容

sendOrderedBroadcast(intent, null);

8.4.3 应用内广播(LocalBroadcastManager)

  • 更安全

  • 只在应用内部传播

  • 没有泄露风险

虽然已弃用,但很多教材还在使用。


8.4.4 实战演练——数鸭子(有序广播)

场景:
按顺序让三个广播接收者喊出歌词:

  1. “数鸭子,走起!”

  2. “两只黄鹂鸣翠柳~”

  3. “三只蚂蚁抬钢锯~”


步骤 1:三个 Receiver(Duck1,Duck2,Duck3)

Duck1Receiver

public class Duck1Receiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.d("duck", "1:数鸭子,走起!");}
}

Duck2Receiver

public class Duck2Receiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.d("duck", "2:两只黄鹂鸣翠柳~");}
}

Duck3Receiver

public class Duck3Receiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.d("duck", "3:三只蚂蚁抬钢锯~");}
}

步骤 2:设置优先级(Manifest)

<receiver android:name=".Duck1Receiver"><intent-filter android:priority="100"><action android:name="duck"/></intent-filter>
</receiver><receiver android:name=".Duck2Receiver"><intent-filter android:priority="50"><action android:name="duck"/></intent-filter>
</receiver><receiver android:name=".Duck3Receiver"><intent-filter android:priority="10"><action android:name="duck"/></intent-filter>
</receiver>

步骤 3:发送有序广播

Intent intent = new Intent("duck");
sendOrderedBroadcast(intent, null);

运行结果(Logcat):

1:数鸭子,走起!
2:两只黄鹂鸣翠柳~
3:三只蚂蚁抬钢锯~

第8章总结(写博客用)

知识点内容
广播机制Android 全局消息通信方式
广播接收者BroadcastReceiver,用来接收广播
注册方式静态(Manifest)/ 动态(Activity 内)
自定义广播自己定义 action,并通过 sendBroadcast 发送
广播类型普通广播、有序广播、本地广播
实战饭堂小广播、数鸭子有序广播

http://www.dtcms.com/a/613978.html

相关文章:

  • 最近的一对
  • 网站设计建网站互联网是做什么的
  • 【C++】AVL树:详细使用及旋转
  • 网站开发技术的雏形 cgi满18点此转入2o2
  • 小华HC32L136K8TA 单片机新建 MDK5 工程模板(二)
  • Qt告警clazy-detaching-temporary浅谈
  • 前端构建工具扩展,Webpack插件开发
  • 拆解 LLM 的 “思考” 过程:推理机制深度解读
  • 《嵌入式成长系列之51单片机 --- Keil5创建工程》
  • 万米单波束EA640的raw数据处理
  • 成都公租房官方网站中南建设网官方网站
  • Cursor Chrome DevTools MCP 配置指南 for Windows
  • 汕头网站设计浩森宇特响应式网页设计图
  • 中职网站建设教学计划学网页设计软件开发
  • SpringBoot中Get请求和POST请求接收参数详解
  • 局部可变形模板匹配算法的初步实现
  • NFS服务
  • python多继承的类型定义了同一个属性或者方法
  • Springboot中CommandLineRunner的用法以及执行顺序的控制
  • (60页PPT)IDC云数据中心机房运维服务解决方案(附下载方式)
  • php网站开发 多少钱青海做网站最好的公司
  • 鸿蒙PC生态实践:LAME 音频编码库移植与工程化指南
  • 可以上传视频的网站建设中国科技成就手抄报
  • Redis_12_持久化(1)
  • stm32f4点灯
  • 自己做网站详细步骤电脑如何安装免费wordpress
  • 前端微前端样式隔离,CSS-in-JS方案
  • 【go.sixue.work】2.3 面向对象:结构体里的 Tag 用法
  • Halcon ROI 与图像仿射变换笔记
  • 软件设计师(软考中级)公式速记笔记