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中注册权限


<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />

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 监听屏幕解锁事件 http://blog.csdn.net/gf771115/article/details/7991892

更多相关文章

  1. Android中RecyclerView的长按
  2. Android(安卓)EventBus 架构设计
  3. [Android] 获取WebView的页面标题(Title)-----WebChromeClient.o
  4. [Android(安卓)Samples视频系列之ApiDemos] App-Activity-SaveRe
  5. Android(安卓)10 startActivity 源码分析
  6. Android(安卓)onTouchEvent的MotionEvent.ACTION_UP不响应
  7. android 带EditView(编辑框)的AlertDialog(对话框)及获取输入内容
  8. Android(安卓)WindowManager
  9. android中重写onConfigurationChanged方法响应系统设置更改

随机推荐

  1. Android开机动画过程
  2. Activity的四种启动模式和onNewIntent()
  3. RelativeLayout 属性
  4. 沉浸式状态栏StatusBar
  5. Android(安卓)Service 服务详细讲解
  6. Android的四种启动方式
  7. Handler机制情景分析
  8. Android应用程序与SurfaceFlinger服务之
  9. Android(安卓)Studio 下载安装教程
  10. android TextView 阴影效果,和使用style学