🚨 什么是 BroadcastReceiver?

BroadcastReceiver 是 Android 提供的一个机制,用于在应用之间或系统与应用之间传递消息。比如:

  • 当手机接收到短信时;
  • 电池电量变化;
  • 网络连接变化;
  • 你自己在 App 内发出一个自定义事件。

这些“消息”叫做广播(Broadcast),而负责“接收广播”的组件就是 BroadcastReceiver


🧠 工作原理:

  1. 某个组件(系统或 app)发送一个广播(用 sendBroadcast());
  2. Android 系统会根据你注册的广播类型,找到匹配的 BroadcastReceiver
  3. BroadcastReceiver 会执行你定义的逻辑(通常在 onReceive() 方法里写处理逻辑);

📦 BroadcastReceiver 分类

1. 静态注册

  • AndroidManifest.xml 中注册
  • 会在 App 没启动的情况下也能接收到广播(某些系统广播)
1
2
3
4
5
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

2. 动态注册

  • 在 Java/Kotlin 代码中注册
  • 一般在 Activity 或 Service 的生命周期内注册和注销
1
2
3
4
BroadcastReceiver receiver = new MyReceiver();
IntentFilter filter = new IntentFilter("com.example.MY_BROADCAST");
registerReceiver(receiver, filter); // 注册
unregisterReceiver(receiver); // 注销(避免内存泄漏)

🧪 示例:自定义广播发送与接收

1️⃣ 创建一个自定义广播接收器:

1
2
3
4
5
6
7
8
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 当广播接收到时,这里会执行
String data = intent.getStringExtra("msg");
Toast.makeText(context, "收到广播: " + data, Toast.LENGTH_SHORT).show();
}
}

2️⃣ 动态注册(例如在 MainActivity 中):

1
2
3
MyReceiver myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter("com.example.MY_BROADCAST");
registerReceiver(myReceiver, filter);

3️⃣ 发送广播:

1
2
3
Intent intent = new Intent("com.example.MY_BROADCAST");
intent.putExtra("msg", "你好,世界!");
sendBroadcast(intent);

🔐 权限和安全

  • 有些系统广播需要权限,例如监听开机广播:

    1
    2
    3
    xml

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  • Android 8.0(API 26)之后,对静态注册广播做了限制,一些隐式广播不能再静态注册,只能动态注册。


✅ 使用小贴士

内容 建议
生命周期管理 动态注册时,记得在 onDestroy() 中注销广播
安全性 自定义广播建议使用 LocalBroadcastManager(已废弃,推荐使用 LiveData/EventBus 替代)
不要做耗时操作 onReceive() 中不能做耗时操作,默认运行在主线程