在 Android 开发中,广播接收器(Broadcast Receiver)是一种能够监听系统全局广播消息的组件。这些广播消息可以来自系统(如电池电量变化、网络连接变化等),也可以来自应用程序本身。广播接收器的主要作用和使用方法如下:
作用
- 系统事件监听:可以监听系统层面的各种事件,例如设备启动完成、电池电量变化、网络连接状态改变等。这使得应用能够对系统状态的变化做出相应的响应。
- 应用间通信:不同的应用可以通过发送和接收广播来进行有限的通信。例如,一个应用可以发送自定义广播,其他应用注册了相应广播接收器的组件就能接收到该广播并进行处理。
- 解耦组件间通信:通过广播机制,组件之间不需要直接引用对方,降低了组件之间的耦合度,提高了代码的可维护性和可扩展性。
使用方法
-
创建广播接收器类 :继承
BroadcastReceiver
类并重写onReceive(Context context, Intent intent)
方法。在这个方法中处理接收到的广播消息。java
scalapublic class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 处理接收到的广播 if (intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) { Toast.makeText(context, "电量低", Toast.LENGTH_SHORT).show(); } } }
-
注册广播接收器:有两种注册方式,静态注册和动态注册。
-
静态注册 :在
AndroidManifest.xml
文件中注册广播接收器。这种方式即使应用没有运行,也能接收广播。xml
xml<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BATTERY_LOW" /> </intent-filter> </receiver>
-
动态注册 :在代码中通过
registerReceiver()
方法注册广播接收器。这种方式需要在应用运行时才能接收广播,并且在不需要时要通过unregisterReceiver()
方法取消注册,以避免内存泄漏。java
scssMyBroadcastReceiver receiver = new MyBroadcastReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_LOW); registerReceiver(receiver, filter); // 在适当的地方取消注册,例如在Activity的onDestroy()方法中 @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); }
-
-
发送广播 :使用
sendBroadcast()
方法发送普通广播,使用sendOrderedBroadcast()
方法发送有序广播。-
发送普通广播:
java
iniIntent intent = new Intent("com.example.MY_CUSTOM_ACTION"); sendBroadcast(intent);
-
发送有序广播:
java
iniIntent intent = new Intent("com.example.MY_CUSTOM_ACTION"); sendOrderedBroadcast(intent, null);
有序广播会按照注册的优先级依次发送给各个广播接收器,每个接收器可以选择是否继续传递广播给下一个接收器,也可以修改广播内容。
-
广播接收器在 Android 开发中是一个非常强大的机制,能够实现应用与系统以及应用之间的高效通信和事件监听。但在使用时需要注意合理使用静态和动态注册方式,避免资源浪费和内存泄漏。