建立一个android工程,修改main.xml文件并编写Activity代码,实现三个按钮分别可以发送广播、代码注册广播和代码取消注册广播,点击发送广播按钮可以发送无序广播,若广播接收者已经注册广播,则吐司提示“收到广播”,否则无吐司提示
时间: 2023-12-09 14:03:42 浏览: 42
好的,我们来一步一步实现这个功能。
首先,我们需要在 `main.xml` 文件中添加三个按钮,如下所示:
```xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_send_broadcast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送广播" />
<Button
android:id="@+id/btn_register_broadcast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="代码注册广播" />
<Button
android:id="@+id/btn_unregister_broadcast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="代码取消注册广播" />
</LinearLayout>
```
接下来,我们需要在 `MainActivity.java` 中编写代码,实现按钮的功能。
首先,我们来实现发送广播的功能。我们可以在发送广播按钮的点击事件中,使用 `sendBroadcast()` 方法发送一个无序广播。代码如下:
```java
Button btnSendBroadcast = findViewById(R.id.btn_send_broadcast);
btnSendBroadcast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.example.broadcastreceiver.MY_BROADCAST");
sendBroadcast(intent);
}
});
```
这里我们定义了一个 `Intent` 对象,并设置了它的 action 为 `"com.example.broadcastreceiver.MY_BROADCAST"`。然后我们使用 `sendBroadcast()` 方法发送这个广播。
接下来,我们来实现代码注册广播的功能。我们需要在按钮的点击事件中,创建一个 `BroadcastReceiver` 对象,并使用 `registerReceiver()` 方法注册这个广播接收者。代码如下:
```java
Button btnRegisterBroadcast = findViewById(R.id.btn_register_broadcast);
btnRegisterBroadcast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "收到广播", Toast.LENGTH_SHORT).show();
}
};
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.broadcastreceiver.MY_BROADCAST");
registerReceiver(receiver, filter);
}
});
```
这里我们定义了一个匿名内部类 `BroadcastReceiver` 对象,并重写了它的 `onReceive()` 方法。当接收到广播时,我们会弹出一个 Toast 提示用户收到了广播。
然后,我们创建了一个 `IntentFilter` 对象,并设置它的 action 为 `"com.example.broadcastreceiver.MY_BROADCAST"`。最后,我们使用 `registerReceiver()` 方法注册这个广播接收者。
最后,我们来实现代码取消注册广播的功能。我们需要在按钮的点击事件中,使用 `unregisterReceiver()` 方法取消注册这个广播接收者。代码如下:
```java
Button btnUnregisterBroadcast = findViewById(R.id.btn_unregister_broadcast);
btnUnregisterBroadcast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "收到广播", Toast.LENGTH_SHORT).show();
}
};
unregisterReceiver(receiver);
}
});
```
这里我们同样创建了一个匿名内部类 `BroadcastReceiver` 对象,并重写了它的 `onReceive()` 方法。然后,我们使用 `unregisterReceiver()` 方法取消注册这个广播接收者。
好了,我们的功能已经实现了。你可以在 `onCreate()` 方法中添加这些代码,然后运行程序,测试一下这三个按钮的功能。
阅读全文