Android如何通过广播接收器来监听手机屏幕是否开启常亮、关闭手机屏幕和锁屏幕等动作;这个功能常常用来制作一些桌面浮窗应用,例如:手q来消息时候如果是锁屏幕状态可以显示出一个手机桌面浮窗来展示未读信息。
下面是具体实现监听代码,放在什么位置可以根据自己逻辑需要,下面是动态广播监听,也可以写成静态广播监听:
final IntentFilter filter = new IntentFilter();
// 屏幕灭屏广播
filter.addAction(Intent.ACTION_SCREEN_OFF);
// 屏幕亮屏广播
filter.addAction(Intent.ACTION_SCREEN_ON);
// 屏幕解锁广播
filter.addAction(Intent.ACTION_USER_PRESENT);
// 当长按电源键弹出“关机”对话或者锁屏时系统会发出这个广播
// example:有时候会用到系统对话框,权限可能很高,会覆盖在锁屏界面或者“关机”对话框之上,
// 所以监听这个广播,当收到时就隐藏自己的对话,如点击pad右下角部分弹出的对话框
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
mBatInfoReceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
Log.d(TAG, "onReceive");
String action = intent.getAction();
if (Intent.ACTION_SCREEN_ON.equals(action)) {
Log.d(TAG, "screen on");
Intent intent2 = new Intent(MainActivity.this,NewDome.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent2);
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
Log.d(TAG, "screen off");
isFirst=true;
} else if (Intent.ACTION_USER_PRESENT.equals(action)) {
Log.d(TAG, "screen unlock");
} else if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
Log.i(TAG, " receive Intent.ACTION_CLOSE_SYSTEM_DIALOGS");
}
}
};
Log.d(TAG, "registerReceiver");
registerReceiver(mBatInfoReceiver, filter);