失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android锁屏界面监听按键 Android 监听锁屏/开屏事件

Android锁屏界面监听按键 Android 监听锁屏/开屏事件

时间:2019-12-04 20:24:28

相关推荐

Android锁屏界面监听按键 Android 监听锁屏/开屏事件

1. 两种方案

(1) 监听BroadcastReceiver

(2)获取PowerManager事件

2. BroadcastReceiver

2.1. 事件

总共有3个事件:

Intent.ACTION_SCREEN_ON : 屏幕点亮

Intent.ACTION_SCREEN_OFF :屏幕关闭

Intent.ACTION_USER_PRESENT: 用户解锁

2.2. 权限

监听用户解锁需要在AndroidManifest中注册权限

2.3. IntentFilter代码

if (mContext != null) {

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_SCREEN_ON);

filter.addAction(Intent.ACTION_SCREEN_OFF);

filter.addAction(Intent.ACTION_USER_PRESENT);

mContext.registerReceiver(mScreenReceiver, filter);

}

3. PowerManager

PowerManager manager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);

if (manager.isScreenOn()) {

if (mScreenStateListener != null) {

mScreenStateListener.onScreenOn();

}

} else {

if (mScreenStateListener != null) {

mScreenStateListener.onScreenOff();

}

}

4. Code

import android.annotation.SuppressLint;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.PowerManager;

/**

* Created by xiyanglu on 4/11/15.

*/

public class ScreenObserver {

private Context mContext;

private ScreenBroadcastReceiver mScreenReceiver;

private ScreenStateListener mScreenStateListener;

public ScreenObserver(Context context) {

mContext = context;

mScreenReceiver = new ScreenBroadcastReceiver();

}

public void startObserver(ScreenStateListener listener) {

mScreenStateListener = listener;

registerListener();

getScreenState();

}

public void shutdownObserver() {

unregisterListener();

}

/**

* 获取screen状态

*/

@SuppressLint("NewApi")

private void getScreenState() {

if (mContext == null) {

return;

}

PowerManager manager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);

if (manager.isScreenOn()) {

if (mScreenStateListener != null) {

mScreenStateListener.onScreenOn();

}

} else {

if (mScreenStateListener != null) {

mScreenStateListener.onScreenOff();

}

}

}

private void registerListener() {

if (mContext != null) {

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_SCREEN_ON);

filter.addAction(Intent.ACTION_SCREEN_OFF);

filter.addAction(Intent.ACTION_USER_PRESENT);

mContext.registerReceiver(mScreenReceiver, filter);

}

}

private void unregisterListener() {

if (mContext != null)

mContext.unregisterReceiver(mScreenReceiver);

}

private class ScreenBroadcastReceiver extends BroadcastReceiver {

private String action = null;

@Override

public void onReceive(Context context, Intent intent) {

action = intent.getAction();

if (Intent.ACTION_SCREEN_ON.equals(action)) { // 开屏

mScreenStateListener.onScreenOn();

} else if (Intent.ACTION_SCREEN_OFF.equals(action)) { // 锁屏

mScreenStateListener.onScreenOff();

} else if (Intent.ACTION_USER_PRESENT.equals(action)) { // 解锁

mScreenStateListener.onUserPresent();

}

}

}

public interface ScreenStateListener {// 返回给调用者屏幕状态信息

public void onScreenOn();

public void onScreenOff();

public void onUserPresent();

}

}

5. 参考文献

[1] Android 监听屏幕解锁事件 /gf771115/article/details/7991892

原文:/matrix_laboratory/article/details/45061633

如果觉得《Android锁屏界面监听按键 Android 监听锁屏/开屏事件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。