1. 程式人生 > >監聽螢幕喚醒,息屏,亮屏的

監聽螢幕喚醒,息屏,亮屏的

首先是一個封裝類

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 (Exception nsme) { Log.d(TAG, "API < 7," + nsme); } } /** * screen狀態廣播接收者 */ private class ScreenBroadcastReceiver
extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) { mScreenStateListener.onScreenOn(); } else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) { mScreenStateListener
.onScreenOff(); } else if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) { mScreenStateListener.onUserPresent(); } } } /** * 請求screen狀態更新 */ public void requestScreenStateUpdate(ScreenStateListener listener) { mScreenStateListener = listener; startScreenBroadcastReceiver(); firstGetScreenState(); } /** * 第一次請求screen狀態 */ 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(); } } } /** * 停止screen狀態更新 */ public void stopScreenStateUpdate() { mContext.unregisterReceiver(mScreenReceiver); } /** * 啟動screen狀態廣播接收器 */ private void startScreenBroadcastReceiver() { 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); } /** * screen是否開啟狀態 */ 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(); public void onUserPresent(); } public final static boolean isScreenLocked(Context c) { android.app.KeyguardManager mKeyguardManager = (KeyguardManager) c .getSystemService(c.KEYGUARD_SERVICE); return mKeyguardManager.inKeyguardRestrictedInputMode(); } }

用法::::::::::::::::::::::::::::::::::::::::::::::::::::::::::在主的介面上

//訂閱
screenObserver.requestScreenStateUpdate(this);
實現介面
//亮屏
@Override
public void onScreenOn() {
    Log.d("xxxxx", "亮屏");
}

//息屏
@Override
public void onScreenOff() {
    Log.d("xxxxx", "息屏");
}

//鎖屏
@Override
public void onUserPresent() {
    Log.d("xxxxx", "鎖屏");
}