关于如何在app应用中如何监听系统关机的信息,并且做相应的逻辑处理,比如存储某些数据等操作。
我们都知道开机完成的时候有开机广播,那么关机的时候有没有关机广播呢?那么Android官方的回答是有,关机广播 "android.intent.action.ACTION_SHUTDOWN",重启广播 "android.intent.action.REBOOT"。
知道有这个广播了,接下来我们就是要如何监听广播了。
1,自定义广播接收器
public class PowerReceiver extends BroadcastReceiver {
private final String action_shutdown = Intent.ACTION_SHUTDOWN;
private final String action_reboot = Intent.ACTION_REBOOT;
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
LogUtil.d("action = "+action);
if (action_shutdown.equals(action)){
//Power Off
LogUtil.i("Power Off!");
YourCode();
}else if (action_reboot.equals(action)){
//Power reboot
LogUtil.i("Power Reboot!");
YourCode();
}
}
/**
* your code
* */
private void YourCode(){
// 你的逻辑
}
}
2,注册广播接收器
PowerReceiver mPowerReceiver = null;
private void RegisterBroadCastReceiver(){
if (mShutdownReceiver != null){
UnRegisterBroadCastReceiver();
}
mPowerReceiver = new PowerReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.ACTION_SHUTDOWN");
intentFilter.addAction("android.intent.action.REBOOT");
registerReceiver(mPowerReceiver,intentFilter);
}
3,接注册广播接收器
private void UnRegisterBroadCastReceiver(){
if (mShutdownReceiver != null) {
unregisterReceiver(PowerReceiver);
mPowerReceiver = null;
}
}
注意:Android P以后,只能使用动态注册才能收到广播。