- BroadcastReceiver :实际上就是一个广播接收器。
- 使用:
<1> 创建一个BroadcastReceiver的子类,必须实现onReceive()方法
```
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 这里实现收到广播后的逻辑
}
}
```
<2>注册分两种
- 静态注册
<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.CONFIGURATION_CHANGED"></action> </intent-filter> </receiver>
这种方式注册,接收器会一直占用内存,不受任何组件生命周期影响,比较耗电。
- 动态注册
@Override
protected void onResume() {
super.onResume();
// 首先,实例化我们创建的BroadcastReceiver的子类
broadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
// 然后,设置接收广播的类型
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
// 注册
registerReceiver(broadcastReceiver, intentFilter);
}
@Override
// 通过动态注册的方法使用BroadcastReceiver 必须要在此方法中注销
protected void onPause() {
super.onPause();
unregisterReceiver(broadcastReceiver);
}
<3>发送广播
Intent intent = new Intent();
// 如果这里设置intentFilter的action与注册时写的一致,那么BroadcastReceiver会接收到这个广播
intent.setAction(ConnectivityManager.CONNECTIVITY_ACTION);
sendBroadcast(intent);
<4>系统广播
系统操作 | action |
---|---|
关闭或打开飞行模式 | Intent.ACTION_AIRPLANE_MODE_CHANGED |
充电时或电量发生变化 | Intent.ACTION_BATTERY_CHANGED |
电池电量低 | Intent.ACTION_BATTERY_LOW |
电池电量充足(即从电量低变化到饱满时会发出广播 | Intent.ACTION_BATTERY_OKAY |
系统启动完成后(仅广播一次) | Intent.ACTION_BOOT_COMPLETED |
检测网络变化 | ConnectivityManager.CONNECTIVITY_ACTION |
按下照相时的拍照按键(硬件按键)时 | Intent.ACTION_CAMERA_BUTTON |
屏幕锁屏 | Intent.ACTION_CLOSE_SYSTEM_DIALOGS |
设备当前设置被改变时(界面语言、设备方向等) | Intent.ACTION_CONFIGURATION_CHANGED |
插入耳机时 | Intent.ACTION_HEADSET_PLUG |
未正确移除SD卡但已取出来时(正确移除方法:设置–SD卡和设备内存–卸载SD卡) | Intent.ACTION_MEDIA_BAD_REMOVAL |
插入外部储存装置(如SD卡) | Intent.ACTION_MEDIA_CHECKING |
成功安装APK | Intent.ACTION_PACKAGE_ADDED |
成功删除APK | Intent.ACTION_PACKAGE_REMOVED |
重启设备 | Intent.ACTION_REBOOT |
屏幕被关闭 | Intent.ACTION_SCREEN_OFF |
屏幕被打开 | Intent.ACTION_SCREEN_ON |
关闭系统时 | Intent.ACTION_SHUTDOWN |
网友评论