ScreenReceiverUtil工具类
/**
* Author : 马占柱
* E-mail : mazhanzhu_3351@163.com
* Time : 2021/9/22 9:40
* Desc : 锁屏解锁的广播动态注册监听
*/
public class ScreenReceiverUtil {
private Context mContext;
private SreenBroadcastReceiver mScreenReceiver;
private SreenStateListener mStateReceiverListener;
private final String SYSTEM_DIALOG_REASON_KEY = "reason";
private final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
private final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
public ScreenReceiverUtil(Context mContext) {
this.mContext = mContext;
}
public void setScreenReceiverListener(SreenStateListener mStateReceiverListener) {
this.mStateReceiverListener = mStateReceiverListener;
// 动态启动广播接收器
this.mScreenReceiver = new SreenBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
mContext.registerReceiver(mScreenReceiver, filter);
}
public void stopScreenReceiverListener() {
mContext.unregisterReceiver(mScreenReceiver);
}
/**
* 监听sreen状态对外回调接口
*/
public interface SreenStateListener {
void onSreenOn();
void onSreenOff();
void onUserPresent();
void pressHome();
void pressMultitask();
}
public class SreenBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (mStateReceiverListener == null) {
return;
}
switch (action) {
case Intent.ACTION_SCREEN_ON:// 开屏
mStateReceiverListener.onSreenOn();
break;
case Intent.ACTION_SCREEN_OFF:// 锁屏
mStateReceiverListener.onSreenOff();
break;
case Intent.ACTION_USER_PRESENT:// 解锁
mStateReceiverListener.onUserPresent();
break;
case Intent.ACTION_CLOSE_SYSTEM_DIALOGS:
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason == null) {
return;
}
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {// Home键
mStateReceiverListener.pressHome();
}
if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {// 最近任务列表键
mStateReceiverListener.pressMultitask();
}
break;
default:
break;
}
}
}
}
使用,在onCreate()中设置
@Override
public void onCreate() {
super.onCreate();
mScreenListener = new ScreenReceiverUtil(this);//锁屏广播监听器
mScreenListener.setScreenReceiverListener(mScreenListenerer);
}
private ScreenReceiverUtil.SreenStateListener mScreenListenerer = new ScreenReceiverUtil.SreenStateListener() {
@Override
public void onSreenOn() {
Log_Ma.e(TAG, "开屏 -------------------");
}
@Override
public void onSreenOff() {
Log_Ma.e(TAG, "锁屏 ");
}
@Override
public void onUserPresent() {
Log_Ma.e(TAG, "解锁 ");
}
@Override
public void pressHome() {
Log_Ma.e(TAG, "------------------------------------------------按下home键----------");
}
@Override
public void pressMultitask() {
Log_Ma.e(TAG, "------------------------------------------------按下多任务键----------");
}
};
同时要记得,在onDestroy()中销毁注册信息
mScreenListener.stopScreenReceiverListener();