Android中广播的种类

广播是Android中一项非常重要的机制,它可以在应用程序之间传递消息和数据,实现应用程序的协作和交互。Android中的广播分为两种类型:系统广播和自定义广播。

一、系统广播

系统广播是由Android系统发出的广播,用于通知应用程序系统级的事件和状态改变。常见的系统广播包括:

  1. 系统启动广播(BOOT_COMPLETED):当设备启动完成后发送的广播,应用程序可以在接收到这个广播后执行一些初始化操作。
// 注册接收系统启动广播的广播接收器
<receiver android:name=".BootCompletedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

// 广播接收器类
public class BootCompletedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            // 执行初始化操作
            // ...
        }
    }
}
  1. 电池状态改变广播(ACTION_BATTERY_CHANGED):当设备的电池状态发生改变时发送的广播,应用程序可以根据电池状态进行相应的操作。
// 注册接收电池状态改变广播的广播接收器
<receiver android:name=".BatteryChangedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED" />
    </intent-filter>
</receiver>

// 广播接收器类
public class BatteryChangedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {
            int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
            float batteryPct = level / (float) scale;
            // 根据电池电量进行相应的操作
            // ...
        }
    }
}
  1. 网络状态改变广播(CONNECTIVITY_ACTION):当设备的网络连接状态发生改变时发送的广播,应用程序可以根据网络状态进行相应的操作。
// 注册接收网络状态改变广播的广播接收器
<receiver android:name=".NetworkChangedReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

// 广播接收器类
public class NetworkChangedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
                // 网络已连接
                // ...
            } else {
                // 网络未连接
                // ...
            }
        }
    }
}

二、自定义广播

自定义广播是应用程序自己发送和接收的广播,用于应用程序内部的模块之间的通信。自定义广播可以基于特定的事件或状态来定义。

// 发送自定义广播
Intent intent = new Intent("com.example.MY_CUSTOM_ACTION");
intent.putExtra("extra_data", "Hello, world!");
sendBroadcast(intent);

// 接收自定义广播的广播接收器
<receiver android:name=".CustomReceiver">
    <intent-filter>
        <action android:name="com.example.MY_CUSTOM_ACTION" />
    </intent-filter>
</receiver>

// 广播接收器类
public class CustomReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("com.example.MY_CUSTOM_ACTION")) {
            String extraData = intent.getStringExtra("extra_data");
            // 处理自定义广播数据
            // ...
        }
    }
}

以上是Android中广播的种类和示例代码。通过广播,应用程序可以实现不同模块之间的信息传递和协作,提升用户体验和应用程序的功能。在使用广播时,需要注意广播的发送和接收的权限,避免滥用广播机制造成性能和安全问题。

序列图:

sequenceDiagram
    participant App1
    participant Broadcast
    participant App2

    App1 ->> Broadcast: 发送广