Android - Broadcast Receivers教程
封面图
•
2025-11-07
•
Android开发
232
0
0
0
当然!以下是一个关于 **Android 中 Broadcast Receivers(广播接收器)** 的详细教程,适合初学者和中级开发者。 --- ## 📱 Android 广播接收器(BroadcastReceiver)教程 ### 一、什么是 Broadcast Receiver? `BroadcastReceiver` 是 Android 系统中的一种组件,用于监听系统或应用发出的广播消息。它可以响应各种系统事件,比如: - 网络状态变化 - 电池电量变化 - 屏幕关闭/打开 - 应用安装/卸载 - 自定义事件(如发送自定义广播) ### 二、BroadcastReceiver 的作用 1. **监听系统事件** 2. **响应其他应用的广播** 3. **执行后台任务(如更新数据)** > 注意:从 Android 8.0(API 26)开始,后台服务受到限制,因此使用 `BroadcastReceiver` 来处理某些后台任务时需要特别注意。 --- ## 三、创建 BroadcastReceiver ### 1. 定义一个类继承 `BroadcastReceiver` ```java public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 在这里处理接收到的广播 String action = intent.getAction(); if (action.equals("com.example.MY_CUSTOM_ACTION")) { Toast.makeText(context, "Custom broadcast received!", Toast.LENGTH_SHORT).show(); } } } ``` --- ### 2. 注册 BroadcastReceiver(两种方式) #### 方式一:在 `AndroidManifest.xml` 中静态注册 ```xml <receiver android:name=".MyReceiver"> <intent-filter> <action android:name="com.example.MY_CUSTOM_ACTION" /> </intent-filter> </receiver> ``` > ⚠️ 静态注册适用于不需要频繁启动的广播,如系统事件。 #### 方式二:在代码中动态注册 ```java MyReceiver receiver = new MyReceiver(); IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION"); registerReceiver(receiver, filter); ``` > 动态注册更灵活,但需记得在适当的时候调用 `unregisterReceiver()`。 --- ## 四、发送广播 ### 1. 发送普通广播(有序或无序) ```java Intent intent = new Intent("com.example.MY_CUSTOM_ACTION"); sendBroadcast(intent); // 无序广播 // sendOrderedBroadcast(intent, null); // 有序广播 ``` > 有序广播可以被多个接收器按优先级接收,也可以被拦截。 --- ### 2. 发送粘性广播(已弃用) > 从 API 21 开始,`sendStickyBroadcast()` 已被废弃。 --- ## 五、常见广播示例 | 广播 Action | 说明 | |-------------|------| | `android.net.conn.CONNECTIVITY_CHANGE` | 网络连接变化 | | `android.intent.action.BATTERY_LOW` | 电池低 | | `android.intent.action.SCREEN_ON` | 屏幕亮起 | | `android.intent.action.SCREEN_OFF` | 屏幕熄灭 | | `android.intent.action.USER_PRESENT` | 用户解锁屏幕 | --- ## 六、注意事项 1. **权限控制**:如果广播是来自其他应用,可能需要声明权限。 2. **后台限制**:从 Android 8.0 起,后台应用不能随意发送或接收广播。 3. **安全问题**:不要使用不安全的广播,防止恶意应用注入。 4. **生命周期管理**:避免在 `onReceive()` 中做耗时操作,否则会引发 ANR。 --- ## 七、完整示例 ### 1. 创建广播接收器 ```java public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { boolean isConnected = NetworkUtils.isNetworkAvailable(context); if (isConnected) { Toast.makeText(context, "网络已连接", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "网络断开", Toast.LENGTH_SHORT).show(); } } } ``` ### 2. 注册到 `AndroidManifest.xml` ```xml <receiver android:name=".NetworkChangeReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> ``` --- ## 八、进阶内容 ### 1. 使用 `LocalBroadcastManager`(推荐) > 用于在应用内部发送和接收广播,提高安全性。 ```java LocalBroadcastManager.getInstance(context).sendBroadcast(intent); ``` ### 2. 处理有序广播 ```java sendOrderedBroadcast(intent, null); ``` 在 `onReceive()` 中可以通过 `abortBroadcast()` 中断广播。 --- ## 九、总结 | 内容 | 说明 | |------|------| | 用途 | 监听系统事件、响应其他应用 | | 类型 | 静态注册 / 动态注册 | | 发送 | `sendBroadcast()` / `sendOrderedBroadcast()` | | 接收 | `onReceive()` 方法 | | 注意事项 | 权限、后台限制、性能等 | --- 如果你需要我提供一个完整的示例项目结构或演示如何实现特定功能(如监听网络变化、电池电量等),欢迎告诉我!
上一篇:
Android - Intents and Filters
下一篇:
android sdk路径在哪个文件夹
标题录入,一次不能超过6条
留言
评论