返回

BroadcastReceiver源码分析之普通消息

Android

----

## 概述

BroadcastReceiver用于在Android应用程序之间进行通信。它允许应用程序在不直接通信的情况下相互发送消息。BroadcastReceiver可以注册监听特定的广播意图,当该意图被广播时,它将被触发并执行相应的操作。

## 发送广播

### 发送普通广播
应用程序可以通过`Context.sendBroadcast()`方法发送广播。
```java
Intent intent = new Intent("com.example.my_broadcast");
intent.putExtra("data", "Hello World!");
context.sendBroadcast(intent);
```
### 发送有序广播
应用程序也可以发送有序广播,这种广播可以按照一定的顺序被接收。
```java
Intent intent = new Intent("com.example.my_broadcast");
intent.putExtra("data", "Hello World!");
context.sendOrderedBroadcast(intent, null);
```

## 接收广播
应用程序可以通过`BroadcastReceiver`类来接收广播。
```java
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 处理广播
    }
}
```
然后在`AndroidManifest.xml`中注册广播接收器
```xml
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="com.example.my_broadcast" />
    </intent-filter>
</receiver>
```

## 粘性广播
粘性广播允许应用程序在发送广播后立即接收该广播。这意味着,即使应用程序在广播发送时未运行,它仍可以接收该广播。
```java
Intent intent = new Intent("com.example.my_broadcast");
intent.putExtra("data", "Hello World!");
context.sendStickyBroadcast(intent);
```

要接收粘性广播,应用程序可以像接收普通广播一样使用`BroadcastReceiver`类。
```java
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 处理广播
    }
}
```
然后在`AndroidManifest.xml`中注册广播接收器
```xml
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="com.example.my_broadcast" />
    </intent-filter>
</receiver>
```

## 结论
BroadcastReceiver是Android应用程序之间进行通信的一种强大工具。它允许应用程序在不直接通信的情况下相互发送消息。