Broadcast的使用

101 阅读2分钟

当开发 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 属性指定权限。