🚨 什么是 BroadcastReceiver?
BroadcastReceiver
是 Android 提供的一个机制,用于在应用之间或系统与应用之间传递消息。比如:
- 当手机接收到短信时;
- 电池电量变化;
- 网络连接变化;
- 你自己在 App 内发出一个自定义事件。
这些“消息”叫做广播(Broadcast),而负责“接收广播”的组件就是 BroadcastReceiver。
🧠 工作原理:
- 某个组件(系统或 app)发送一个广播(用
sendBroadcast()
);
- Android 系统会根据你注册的广播类型,找到匹配的
BroadcastReceiver
;
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);
|
🔐 权限和安全
✅ 使用小贴士
内容 |
建议 |
生命周期管理 |
动态注册时,记得在 onDestroy() 中注销广播 |
安全性 |
自定义广播建议使用 LocalBroadcastManager (已废弃,推荐使用 LiveData/EventBus 替代) |
不要做耗时操作 |
onReceive() 中不能做耗时操作,默认运行在主线程 |