Android编程四大组件之BroadcastReceiver(广播接收者)用法实例
什么是广播接收者?
广播接收者是一种组件,用于接收系统或其他应用程序发送的广播消息。它可以在后台运行或在应用程序内注册,当监听到感兴趣的广播消息时,可以执行特定的操作。通过广播接收者,您的应用程序可以动态地响应各种系统事件,包括接收短信、连接蓝牙设备、接收互联网状态等。
广播接收者用法
1. 在AndroidManifes.xml中进行声明
广播接收者需要在AndroidManifes.xml文件中进行声明。例如,要为应用程序添加一个用于接收系统开机广播的广播接收器,可以按照以下方式在AndroidManifes.xml文件中声明:
<receiver
android:name=".BootReceiver"
android:enabled="true"
android exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
在这个示例中,BootReceiver
是自定义的一个广播接收者。
2. 结合BroadcastReceiver类实现自定义广播接收者
要实现自定义的广播接收者,需要首先创建一个继承自BroadcastReceiver类的Java类。例如,实现一个监听网络变化的广播接收者:
public class NetworkStateReceiver 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()) {
Toast.makeText(context, "网络已连接", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "网络连接已断开", Toast.LENGTH_SHORT).show();
}
}
}
}
在这个示例中,NetworkStateReceiver
实现了一个 BroadcastReceiver
类,当网络连接状态发生变化时,会发送 ConnectivityManager.CONNECTIVITY_ACTION
的广播消息。然后在 onReceive
方法中处理这个广播消息,显示相应的提示信息。
3. 注册广播接收者
要让应用程序能够接收到广播消息,还需要在代码中动态地注册广播接收者。例如,要注册刚刚实现的NetworkStateReceiver
接收器,可以在Activity中按照以下方式进行:
public class MainActivity extends AppCompatActivity {
private NetworkStateReceiver networkStateReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
networkStateReceiver = new NetworkStateReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkStateReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkStateReceiver);
}
}
在这个示例中,MainActivity
动态注册了一个 NetworkStateReceiver
广播接收者,对网络状态的变化做出响应。
广播接收者应用示例
示例一:监听屏幕锁定/解锁事件
这个示例展示了如何为应用程序添加广播接收器,以便在Android平台的屏幕锁定/解锁事件发生时向用户报告。
要创建此示例,请按照如下步骤进行:
- 创建一个新的Java类,继承自BroadcastReceiver:
public class ScreenStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Toast.makeText(context, "屏幕已解锁", Toast.LENGTH_SHORT).show();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Toast.makeText(context, "屏幕已锁定", Toast.LENGTH_SHORT).show();
}
}
}
在这个示例中,ScreenStateReceiver
实现了一个 BroadcastReceiver
类,通过监听 Intent.ACTION_SCREEN_ON
和Intent.ACTION_SCREEN_OFF
广播消息,当发生屏幕锁定/解锁事件时,会显示相应的提示信息。
- 在AndroidManifest.xml中添加声明:
<receiver
android:name=".ScreenStateReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"/>
<action android:name="android.intent.action.SCREEN_ON"/>
</intent-filter>
</receiver>
在这个示例中,您需要在AndroidManifest.xml
文件中声明一个新的广播接收器,将其与<action>
元素配对以检测应用程序有兴趣的广播消息。
- 在Activity中注册广播接收者
public class MainActivity extends AppCompatActivity {
private ScreenStateReceiver mReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注册广播接收器
mReceiver = new ScreenStateReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(mReceiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 注销广播接收器
if (mReceiver != null) {
unregisterReceiver(mReceiver);
mReceiver = null;
}
}
}
在本示例中,您需要在 MainActivity
中实现动态广播接收器的注册,并使用 IntentFilter
对象注册您的广播接收器。
示例二:监听电池状态变化
这个示例展示了如何为应用程序添加广播接收器,以便在电池状态发生变化时向用户报告电池电量。
要创建此示例,请按照如下步骤进行:
- 创建一个新的Java类,继承自BroadcastReceiver,实现监听电池状态的功能:
public class BatteryLevelReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;
String message = String.format("当前电池电量为 %.2f %%", batteryPct * 100);
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
在这个示例中,BatteryLevelReceiver
实现了一个 BroadcastReceiver
类,通过监听 Intent.ACTION_BATTERY_CHANGED
广播消息,获取当前电池电量并将其通知给用户。
- 在AndroidManifest.xml中添加声明:
<receiver
android:name=".BatteryLevelReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED" />
</intent-filter>
</receiver>
在这个示例中,您需要在AndroidManifest.xml
文件中声明一个新的广播接收器,将其与<action>
元素配对以检测应用程序有兴趣的广播消息。
- 在Activity中注册广播接收者
public class MainActivity extends AppCompatActivity {
private BatteryLevelReceiver mReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注册广播接收器
mReceiver = new BatteryLevelReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(mReceiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 注销广播接收器
if (mReceiver != null) {
unregisterReceiver(mReceiver);
mReceiver = null;
}
}
}
在本示例中,您需要在 MainActivity
中实现动态广播接收器的注册,并使用 IntentFilter
对象注册您的广播接收器。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android编程四大组件之BroadcastReceiver(广播接收者)用法实例 - Python技术站