开机广播
- 任何的targetSdkVersion版本都能收到该广播
- 必须采用静态注册的方式(Manifest.xml中声明)
下面是对应的代码以及权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:name=".MyBootBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<!-- 开机完成✅ 启动完成✅ 开机是危险的行为,需要权限 -->
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
关机广播
- 任何的targetSdkVersion版本都能收到该广播
- 采用动态注册的方式(静态注册的我没有收到)
下面是广播内容
public class MyShutDownBroadReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_SCREEN_ON.equals(action)) {
L.d("屏幕打开");
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
L.d("关屏幕了,总的开屏幕时间" + (SystemClock.uptimeMillis() / 1000 / 60 + "分钟"));
} else if (Intent.ACTION_USER_PRESENT.equals(action)) {
L.d("屏幕解锁");
} else if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
L.d(" receive Intent.ACTION_CLOSE_SYSTEM_DIALOGS");
} else if (Intent.ACTION_SHUTDOWN.equals(intent.getAction())) {
L.d("Android操作系统关机了");
D.showShort("Android操作系统关机了");
P.putString("end", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()) + "");
} else if (Intent.ACTION_DATE_CHANGED.equals(action)) {//日期变化步数重置为0
L.d("日期改变ACTION_DATE_CHANGED");
} else if (Intent.ACTION_TIME_CHANGED.equals(action)) {
L.d("时间变化ACTION_TIME_CHANGED" + action);
} else if (Intent.ACTION_TIME_TICK.equals(action)) {//日期变化步数重置为0
L.d("时间改变ACTION_TIME_TICK" + action);
}
}
}
动态注册
IntentFilter filter = new IntentFilter();
// 屏幕灭屏广播
filter.addAction(Intent.ACTION_SCREEN_OFF);
//关机广播
filter.addAction(Intent.ACTION_SHUTDOWN);
// 屏幕亮屏广播
filter.addAction(Intent.ACTION_SCREEN_ON);
// 屏幕解锁广播
// filter.addAction(Intent.ACTION_USER_PRESENT);
// 当长按电源键弹出“关机”对话或者锁屏时系统会发出这个广播
// example:有时候会用到系统对话框,权限可能很高,会覆盖在锁屏界面或者“关机”对话框之上,
// 所以监听这个广播,当收到时就隐藏自己的对话,如点击pad右下角部分弹出的对话框
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
//监听日期变化
filter.addAction(Intent.ACTION_DATE_CHANGED);
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_TIME_TICK);
myShutDownBroadReceiver = new MyShutDownBroadReceiver();
registerReceiver(myShutDownBroadReceiver, filter);