返回
Android点将台:解码BroadcastReceiver[-经典使用范例-](上手级)
Android
2023-12-07 08:59:47
序曲:踏上BroadcastReceiver的征程
在Android开发的道路上,BroadcastReceiver扮演着信息传递的使者,连接着应用与系统乃至应用与应用之间的沟通桥梁。它宛如一位忠诚的传令官,在各个组件之间传递着重要的讯息,确保应用程序能够对系统事件或其他应用发出的广播做出及时响应。
第一章:揭开BroadcastReceiver的神秘面纱
-
BroadcastReceiver的职责 :BroadcastReceiver作为Android四大组件之一,主要负责接收和处理来自系统或其他应用程序发送的广播消息。它就像一个守卫在城墙上的哨兵,时刻准备着捕捉任何风吹草动,并迅速将信息传递给应用程序。
-
使用场景 :BroadcastReceiver的使用场景十分广泛,包括但不限于以下几种情况:
- 系统事件监听:监听设备状态变化(如网络连接、电池电量、屏幕状态等)并做出相应处理。
- 应用间通信:在不同的应用程序之间发送和接收自定义广播,实现跨应用的信息传递。
- 本地广播:在应用内部发送和接收广播,实现组件之间的通信。
第二章:静态注册BroadcastReceiver
-
静态注册 :静态注册BroadcastReceiver是指在应用程序的AndroidManifest.xml文件中显式声明BroadcastReceiver,这种注册方式简单直接,但无法动态控制广播的接收。
-
步骤详解 :
- 编写一个类继承自BroadcastReceiver :创建Java类继承自BroadcastReceiver,并在其中重写onReceive()方法,用于处理接收到的广播。
- 测试的Activity :创建一个Activity来测试BroadcastReceiver的接收功能,并在Activity的onResume()方法中注册BroadcastReceiver,并在onPause()方法中注销BroadcastReceiver。
- 清单文件配置 :在AndroidManifest.xml文件中声明BroadcastReceiver,并指定其接收的广播动作(intent-filter)。
-
代码示例 :
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
-
动态注册 :动态注册BroadcastReceiver是指在应用程序运行时动态注册BroadcastReceiver,这种注册方式更加灵活,可以根据需要随时注册或注销广播接收器。
-
步骤详解 :
- 创建BroadcastReceiver :创建Java类继承自BroadcastReceiver,并在其中重写onReceive()方法,用于处理接收到的广播。
- 动态注册 :在应用程序需要接收广播时,使用Context.registerReceiver()方法动态注册BroadcastReceiver。
- 动态注销 :在应用程序不需要接收广播时,使用Context.unregisterReceiver()方法动态注销BroadcastReceiver。
-
代码示例 :
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实现本地广播
-
LocalBroadcastManager简介 :LocalBroadcastManager是Android提供的一个本地广播管理器,它允许应用程序在应用内部发送和接收广播,而不会影响其他应用程序。
-
步骤详解 :
- 获取LocalBroadcastManager实例 :使用LocalBroadcastManager.getInstance(Context)方法获取LocalBroadcastManager实例。
- 发送广播 :使用LocalBroadcastManager.sendBroadcast(Intent)方法发送广播。
- 接收广播 :在需要接收广播的组件中,使用LocalBroadcastManager.registerReceiver(BroadcastReceiver, IntentFilter)方法注册BroadcastReceiver。
-
代码示例 :
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扮演着传令官的角色,将来自系统或其他应用