前言
广播(Broadcast)是Android四大组件之一,是Android系统内部或其他应用程序向其他应用程序发送消息的机制。广播是一种异步的、无连接的通信方式,不需要建立额外的连接就可以在应用程序之间传递消息。
下面是广播的两种类型:
系统广播:Android系统发出的广播,例如网络状态改变、电量低等。
应用程序广播:应用程序发出的广播,可以在应用程序之间进行通信。
在广播中,应用程序可以通过发送Intent对象来发送广播,并通过注册BroadcastReceiver组件接收广播。
下面是发送广播的代码:
Intent intent = new Intent("com.example.broadcast.MY_BROADCAST");
sendBroadcast(intent);
下面是接收广播的代码:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 处理接收到的广播
}
}
// 在清单文件中注册BroadcastReceiver
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.broadcast.MY_BROADCAST"/>
</intent-filter>
</receiver>
在上面的代码中,我们发送了一个名为“com.example.broadcast.MY_BROADCAST”的广播,然后通过MyBroadcastReceiver组件接收广播并处理。
广播是Android开发中我们可以通过Intent携带数据,以便在接收广播时获取需要的信息。
例如,我们可以这样携带数据:
Intent intent = new Intent("com.example.broadcast.MY_BROADCAST");
intent.putExtra("message", "Hello, Broadcast!");
sendBroadcast(intent);
然后我们可以在接收广播时获取数据:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
// 处理接收到的广播
}
}
有时,我们可能希望在接收广播后有一个组件做出反应,例如显示一条通知。这时,我们可以使用PendingIntent来触发另一个组件,如下所示:
Intent intent = new Intent(this, MyActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My Notification")
.setContentText("Hello, Notification!")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(pendingIntent)
.setAutoCancel(true);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(NOTIFICATION_ID, builder.build());
上面的代码通过PendingIntent启动MyActivity组件,并显示一条通知。
另外,有时我们希望在接收广播后立即停止广播的传播。这时,我们可以使用abortBroadcast()方法,如下所示:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void
public void onReceive(Context context, Intent intent) {
// 接收到广播后的操作
// ...
// 停止广播的传播
abortBroadcast();
}
}
最后,我们需要在AndroidManifest.xml中注册我们的广播接收器。这可以通过在应用程序的元素下添加以下代码来完成:
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.broadcast.MY_BROADCAST" />
</intent-filter>
</receiver>