1. 广播接收器的作用:
- 接收系统广播:例如开机完成、电池电量变化、网络状态变化等。
- 接收应用内部广播:应用程序内部的各个组件之间进行通信。
2. 清单文件中的注册:
- 在 AndroidManifest.xml 文件中注册 BroadcastReceiver 可以使其在整个应用程序的生命周期内接收广播。
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="com.example.myapp.CUSTOM_ACTION" />
</intent-filter>
</receiver>
3. 动态注册:
- 在代码中使用 registerReceiver() 方法进行动态注册,通常在应用程序运行时注册,并在不再需要接收广播时取消注册。
MyReceiver myReceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.BOOT_COMPLETED");
intentFilter.addAction("com.example.myapp.CUSTOM_ACTION");
registerReceiver(myReceiver, intentFilter);
// 取消注册
unregisterReceiver(myReceiver);
4. BroadcastReceiver 的实现:
- 创建一个继承自 BroadcastReceiver 的类,并实现 onReceive() 方法。在该方法中处理接收到广播的逻辑。
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null) {
switch (action) {
case Intent.ACTION_BOOT_COMPLETED:
// 处理开机广播
break;
case "com.example.myapp.CUSTOM_ACTION":
// 处理自定义广播
break;
}
}
}
}
5. 发送广播:
- 使用 sendBroadcast() 方法发送自定义广播,应用程序内的组件可以注册并接收这些广播。
Intent customIntent = new Intent("com.example.myapp.CUSTOM_ACTION");
sendBroadcast(customIntent);
6. BroadcastReceiver 的生命周期:
- BroadcastReceiver 的生命周期非常短暂,只在 onReceive() 方法执行时存在。因此,不应在该方法中执行耗时的操作,否则可能导致 ANR(Application Not Responding)错误。
7. BroadcastReceiver 和权限:
- 对于一些系统广播或需要跨应用程序的广播,可能需要声明相应的权限,并确保广播发送者和接收者都具有相应的权限。
以上是 Broadcast Receiver 的一些基本概念和用法。通过合理使用 BroadcastReceiver,你可以实现应用程序内部组件之间的通信,同时也能响应系统级别的广播事件。在开发中,要注意广播的滥用可能导致性能和安全性问题,因此需要谨慎使用。
转载请注明出处:http://www.zyzy.cn/article/detail/15176/Android