Implementation method: 1) through Broadcastreceiver receive broadcast intent.action_screen_on and Intent.action_screen_off can determine whether the screen State lock screen, but only when the screen status changes will be issued broadcast ;
2) If you want to get the screen state before the screen state changes, you can call PowerManager's Isscreenon method through the reflection mechanism.
For specific implementations, see the code:
The implementation of Class screenobserver for screen state monitoring is implemented as follows:
[Java]View Plaincopy
- Package com.isoft.screen;
- Import Java.lang.reflect.Method;
- Import android.app.Activity;
- Import Android.content.BroadcastReceiver;
- Import Android.content.Context;
- Import android.content.Intent;
- Import Android.content.IntentFilter;
- Import Android.os.PowerManager;
- Import Android.util.Log;
- /**
- *
- * @author Zhangyg
- *
- */
- Public class screenobserver{
- private static String TAG = "Screenobserver";
- private Context Mcontext;
- private Screenbroadcastreceiver Mscreenreceiver;
- private Screenstatelistener Mscreenstatelistener;
- private static Method mreflectscreenstate;
- Public Screenobserver (context context) {
- Mcontext = context;
- Mscreenreceiver = new Screenbroadcastreceiver ();
- try {
- Mreflectscreenstate = PowerManager. Class.getmethod ("Isscreenon",
- new class[] {});
- } catch (Nosuchmethodexception nsme) {
- LOG.D (TAG, "API < 7," + nsme);
- }
- }
- /**
- * Screen Status Broadcast recipient
- * @author Zhangyg
- *
- */
- 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 ();
- }
- }
- }
- /**
- * Request a screen status update
- * @param listener
- */
- public void Requestscreenstateupdate (Screenstatelistener listener) {
- Mscreenstatelistener = listener;
- Startscreenbroadcastreceiver ();
- Firstgetscreenstate ();
- }
- /**
- * Request screen status for the first time
- */
- private void Firstgetscreenstate () {
- PowerManager manager = (PowerManager) mcontext
- . Getsystemservice (Activity.power_service);
- if (Isscreenon (manager)) {
- if (mscreenstatelistener! = null) {
- Mscreenstatelistener.onscreenon ();
- }
- } Else {
- if (mscreenstatelistener! = null) {
- Mscreenstatelistener.onscreenoff ();
- }
- }
- }
- /**
- * Stop Screen status update
- */
- public void Stopscreenstateupdate () {
- Mcontext.unregisterreceiver (Mscreenreceiver);
- }
- /**
- * Start Screen status broadcast receiver
- */
- private void Startscreenbroadcastreceiver () {
- Intentfilter filter = new Intentfilter ();
- Filter.addaction (intent.action_screen_on);
- Filter.addaction (Intent.action_screen_off);
- Mcontext.registerreceiver (mscreenreceiver, filter);
- }
- /**
- * Screen is open
- * @param pm
- * @return
- */
- private static boolean Isscreenon (PowerManager pm) {
- Boolean screenstate;
- try {
- Screenstate = (Boolean) mreflectscreenstate.invoke (PM);
- } catch (Exception e) {
- Screenstate = false;
- }
- return screenstate;
- }
- Public interface Screenstatelistener {
- public void Onscreenon ();
- public void Onscreenoff ();
- }
- }
The example class screenobserveractivity that tests the Screenobserver feature is implemented as follows:
[Java]View Plaincopy
- Package com.isoft.screen;
- Import android.app.Activity;
- Import Android.os.Bundle;
- Import Android.util.Log;
- Import Com.isoft.screen.ScreenObserver.ScreenStateListener;
- Public class Screenobserveractivity extends Activity {
- private String TAG = "Screenobserveractivity";
- private Screenobserver Mscreenobserver;
- @Override
- public void OnCreate (Bundle savedinstancestate) {
- super.oncreate (savedinstancestate);
- Setcontentview (R.layout.main);
- Mscreenobserver = New Screenobserver (this);
- Mscreenobserver.requestscreenstateupdate (new Screenstatelistener () {
- @Override
- public void Onscreenon () {
- Dosomethingonscreenon ();
- }
- @Override
- public void Onscreenoff () {
- Dosomethingonscreenoff ();
- }
- });
- }
- private void Dosomethingonscreenon () {
- LOG.I (TAG, "screen was on ");
- }
- private void Dosomethingonscreenoff () {
- LOG.I (TAG, "screen is Off");
- }
- @Override
- protected void OnDestroy () {
- Super.ondestroy ();
- //Stop monitoring screen status
- Mscreenobserver.stopscreenstateupdate ();
- }
- }
- http://blog.csdn.net/m_changgong/article/details/7608911
"Android Code snippet eight" monitor whether the Android screen lock screen