📜  Android中的广播接收器示例(1)

📅  最后修改于: 2023-12-03 15:13:22.724000             🧑  作者: Mango

Android中的广播接收器示例

Android中的广播接收器是用于接收系统或应用程序发出的广播消息的组件。它可以接收各种类型的广播消息,例如屏幕开关、电池电量变化、短信接收等。

1. 注册广播接收器

要使用广播接收器,必须先注册它。可以在代码中静态注册或动态注册。

静态注册

静态注册是在AndroidManifest.xml文件中进行的。以下是一个示例:

<receiver
    android:name=".MyReceiver"
    android:enabled="true"
    android:exported="false" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
        <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
    </intent-filter>
</receiver>

在上面的代码中,我们定义了一个名为MyReceiver的广播接收器,它将接收三种类型的广播消息:BOOT_COMPLETED、ACTION_POWER_CONNECTED和ACTION_POWER_DISCONNECTED。

动态注册

动态注册是在代码中进行的。以下是一个示例:

MyReceiver receiver = new MyReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, filter);

在上面的代码中,我们定义了一个名为MyReceiver的广播接收器,并注册了一个IntentFilter,以便它只接收ACTION_BATTERY_CHANGED类型的广播消息。

2. 编写广播接收器

接下来,让我们来编写一个简单的广播接收器,以便它可以接收和处理广播消息。

public class MyReceiver 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;

            Toast.makeText(context, "Battery level: " + batteryPct * 100 + "%", Toast.LENGTH_LONG).show();
        }
    }
}

在上面的代码中,我们定义了一个MyReceiver类,它继承自BroadcastReceiver类。我们覆盖了onReceive()方法,在接收到广播消息时执行代码。

在本示例中,我们接收了ACTION_BATTERY_CHANGED类型的广播消息,并获取了当前电池电量的百分比。我们使用Toast来显示电池电量。

3. 解注册广播接收器

当你不再需要广播接收器时,你必须将它解注册以避免内存泄漏。以下是一个示例:

unregisterReceiver(receiver);

在上面的代码中,我们将之前注册的广播接收器解注册。

总结

Android广播接收器是一个非常重要的组件,它可以帮助我们接收和处理各种系统和应用程序的广播消息。在编写应用程序时,我们应该注意在注册和解注册广播接收器时,确保不会出现内存泄漏问题。