Android listens to screen lock/Open events, and android screen lock
1. Two solutions
(1) Listen to BroadcastReceiver
(2) obtain the PowerManager event
2. BroadcastReceiver2.1. event
There are 3 events in total:
Intent. ACTION_SCREEN_ON: Intent. ACTION_SCREEN_OFF: Intent. ACTION_USER_PRESENT: unlocked
2.2. Permission
To unlock a listener, you must register the permission in AndroidManifest.
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
2.3. IntentFilter code
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 listener ();} public void startObserver (ScreenStateListener listener) {mScreenStateListener = listener; registerListener (); getScreenState ();} public void shutdownObserver () {unregisterListener ();}/*** get screen status */@ 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) {// enable mScreenStateListener. onScreenOn ();} else if (Intent. ACTION_SCREEN_OFF.equals (action) {// lock screen mScreenStateListener. onScreenOff ();} else if (Intent. ACTION_USER_PRESENT.equals (action) {// unlock mScreenStateListener. onUserPresent () ;}} public interface ScreenStateListener {// return the screen status information to the caller public void onScreenOn (); public void onScreenOff (); public void onUserPresent ();}}
5. References
[1] Android monitor screen unlock event http://blog.csdn.net/gf771115/article/details/7991892