返回

Android点将台:解码BroadcastReceiver[-经典使用范例-](上手级)

Android

序曲:踏上BroadcastReceiver的征程
在Android开发的道路上,BroadcastReceiver扮演着信息传递的使者,连接着应用与系统乃至应用与应用之间的沟通桥梁。它宛如一位忠诚的传令官,在各个组件之间传递着重要的讯息,确保应用程序能够对系统事件或其他应用发出的广播做出及时响应。

第一章:揭开BroadcastReceiver的神秘面纱

  1. BroadcastReceiver的职责 :BroadcastReceiver作为Android四大组件之一,主要负责接收和处理来自系统或其他应用程序发送的广播消息。它就像一个守卫在城墙上的哨兵,时刻准备着捕捉任何风吹草动,并迅速将信息传递给应用程序。

  2. 使用场景 :BroadcastReceiver的使用场景十分广泛,包括但不限于以下几种情况:

    • 系统事件监听:监听设备状态变化(如网络连接、电池电量、屏幕状态等)并做出相应处理。
    • 应用间通信:在不同的应用程序之间发送和接收自定义广播,实现跨应用的信息传递。
    • 本地广播:在应用内部发送和接收广播,实现组件之间的通信。

第二章:静态注册BroadcastReceiver

  1. 静态注册 :静态注册BroadcastReceiver是指在应用程序的AndroidManifest.xml文件中显式声明BroadcastReceiver,这种注册方式简单直接,但无法动态控制广播的接收。

  2. 步骤详解

    • 编写一个类继承自BroadcastReceiver :创建Java类继承自BroadcastReceiver,并在其中重写onReceive()方法,用于处理接收到的广播。
    • 测试的Activity :创建一个Activity来测试BroadcastReceiver的接收功能,并在Activity的onResume()方法中注册BroadcastReceiver,并在onPause()方法中注销BroadcastReceiver。
    • 清单文件配置 :在AndroidManifest.xml文件中声明BroadcastReceiver,并指定其接收的广播动作(intent-filter)。
  3. 代码示例

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 处理接收到的广播
    }
}

public class MainActivity extends AppCompatActivity {
    private MyBroadcastReceiver receiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        receiver = new MyBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(receiver, intentFilter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiver);
    }
}
<manifest ...>
    <application ...>
        <receiver android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

第三章:动态注册BroadcastReceiver

  1. 动态注册 :动态注册BroadcastReceiver是指在应用程序运行时动态注册BroadcastReceiver,这种注册方式更加灵活,可以根据需要随时注册或注销广播接收器。

  2. 步骤详解

    • 创建BroadcastReceiver :创建Java类继承自BroadcastReceiver,并在其中重写onReceive()方法,用于处理接收到的广播。
    • 动态注册 :在应用程序需要接收广播时,使用Context.registerReceiver()方法动态注册BroadcastReceiver。
    • 动态注销 :在应用程序不需要接收广播时,使用Context.unregisterReceiver()方法动态注销BroadcastReceiver。
  3. 代码示例

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 处理接收到的广播
    }
}

public class MainActivity extends AppCompatActivity {
    private MyBroadcastReceiver receiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        receiver = new MyBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(receiver, intentFilter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiver);
    }
}

第四章:应用实战:利用LocalBroadcastManager实现本地广播

  1. LocalBroadcastManager简介 :LocalBroadcastManager是Android提供的一个本地广播管理器,它允许应用程序在应用内部发送和接收广播,而不会影响其他应用程序。

  2. 步骤详解

    • 获取LocalBroadcastManager实例 :使用LocalBroadcastManager.getInstance(Context)方法获取LocalBroadcastManager实例。
    • 发送广播 :使用LocalBroadcastManager.sendBroadcast(Intent)方法发送广播。
    • 接收广播 :在需要接收广播的组件中,使用LocalBroadcastManager.registerReceiver(BroadcastReceiver, IntentFilter)方法注册BroadcastReceiver。
  3. 代码示例

public class MainActivity extends AppCompatActivity {
    private LocalBroadcastManager localBroadcastManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.broadcast.LOCAL_BROADCAST");
        localBroadcastManager.registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // 处理接收到的广播
            }
        }, intentFilter);

        // 发送广播
        Intent intent = new Intent("com.example.broadcast.LOCAL_BROADCAST");
        localBroadcastManager.sendBroadcast(intent);
    }
}

结语:点将台上的BroadcastReceiver

在Android开发的舞台上,BroadcastReceiver扮演着传令官的角色,将来自系统或其他应用