当开发 Android应用程序时,Broadcast广播是一种重要的机制,用于在应用程序组件之间传递消息和事件。
下面是使用Broadcast的一般步骤:
1、定义广播接收器(Broadcast Receiver)
- 创建一个类,继承自
BroadcastReceiver类。 - 在类中重写
onReceive()方法,该方法将在接收到广播时被调用。 - 在
onReceive()方法中处理接收到的广播消息或事件。
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// 在这里处理接收到的广播消息或事件
if (intent?.action == "com.example.MY_ACTION") {
// 处理自定义广播动作
}
}
}
2、注册广播接收器
- 静态注册。在 AndroidManifest.xml 文件中声明广播接收器。在
<application>标签内部添加<receiver>标签,并指定接收器类的名称。使用<intent-filter>标签指定接收器要处理的广播类型。可以使用<action>标签指定广播的动作,或使用其他标签来过滤广播。
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.MY_ACTION" />
</intent-filter>
</receiver>
- 动态注册。或者在代码中动态注册广播接收器,使用
registerReceiver()方法,传入接收器实例和IntentFilter对象。
val receiver = MyBroadcastReceiver()
val filter = IntentFilter("com.example.MY_ACTION")
registerReceiver(receiver, filter)
3、发送广播
发送标准广播:
- 创建一个
Intent对象,指定要发送的广播类型或动作。 - 可以使用
putExtra()方法向Intent对象中添加额外的数据,以便接收器可以获取。 - 使用
sendBroadcast()方法发送广播。
val intent = Intent("com.example.MY_ACTION")
intent.putExtra("message", "Hello, Broadcast!")
sendBroadcast(intent)
发送有序广播:
有序广播会按照优先级顺序依次传递给接收器,并且可以通过设置 android:priority 属性来指定接收器的优先级。接收器可以通过 abortBroadcast() 方法中止广播的传递,或使用 setResult() 方法设置广播的结果。
val intent = Intent("com.example.MY_ACTION")
intent.putExtra("message", "Hello, Broadcast!")
sendOrderedBroadcast(intent, null)
4、接收广播
- 在广播接收器的
onReceive()方法中处理接收到的广播消息或事件。 - 可以通过
Intent对象获取广播的数据,使用getStringExtra()、getIntExtra()等方法。 - 根据需要执行逻辑操作,例如更新UI、启动服务或执行其他操作。
class MyActivity : AppCompatActivity() {
private val receiver = MyBroadcastReceiver()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
val filter = IntentFilter("com.example.MY_ACTION")
registerReceiver(receiver, filter)
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(receiver)
}
}
5、其他
生命周期管理:
动态注册的广播接收器应在不需要接收广播时进行注销,以避免内存泄漏。使用 unregisterReceiver() 方法注销接收器。
广播的类型:
- 系统广播:由 Android 系统发送的广播,例如设备启动完成、网络状态变化等。
- 自定义广播:应用程序内部发送的广播,用于应用程序组件之间的通信。
广播的权限:
- 可以为广播接收器指定权限,以限制哪些应用程序可以发送广播。
- 在
<receiver>标签中使用android:permission属性指定权限。