Android判斷屏幕鎖屏的方法總結

1、代碼直接斷定html

2、接收廣播ide

如今先說第一類方法(代碼直接斷定):spa

一、經過PowerManager的isScreenOn方法,代碼以下:.net

1rest

2code

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);htm

boolean isScreenOn = pm.isScreenOn();//若是爲true,則表示屏幕「亮」了,不然屏幕「暗」了。事件


註釋已經寫的很明白了,如今大概說一下,ci

 

屏幕「亮」,表示有兩種狀態:a、未鎖屏 b、目前正處於解鎖狀態 。這兩種狀態屏幕都是亮的get

屏幕「暗」,表示目前屏幕是黑的 。

 

二、經過KeyguardManager的inKeyguardRestrictedInputMode方法,代碼以下:

 

?

1

2

KeyguardManager mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);

boolean flag = mKeyguardManager.inKeyguardRestrictedInputMode();

 

 

註釋已經寫的很明白了,如今大概說一下,boolean flag = mKeyguardManager.inKeyguardRestrictedInputMode();
源碼的返回值的解釋是:true if in keyguard restricted input mode.
通過試驗,總結爲:
若是flag爲true,表示有兩種狀態:a、屏幕是黑的 b、目前正處於解鎖狀態 。
若是flag爲false,表示目前未鎖屏

 

註明:上面的兩種方法,也能夠經過反射機制來調用。
下面以第一個方法爲例說明一下。

 

?

1

2

3

4

5

6

7

8

private static Method mReflectScreenState;

try {

    mReflectScreenState = PowerManager.class.getMethod(isScreenOn, new Class[] {});

    PowerManager pm = (PowerManager) context.getSystemService(Activity.POWER_SERVICE);

    boolean isScreenOn= (Boolean) mReflectScreenState.invoke(pm);

} catch (Exception e) {

    e.printStackTrace()

}


 

 

如今介紹第二類方法(接收系統的廣播):

接收系統廣播事件,屏幕在三種狀態(開屏、鎖屏、解鎖)之間變換的時候,系統都會發送廣播,咱們只須要監聽這些廣播便可。
代碼以下:

 

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

private ScreenBroadcastReceiver 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)) {          

            // 開屏

        } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {

            // 鎖屏

        } else if (Intent.ACTION_USER_PRESENT.equals(action)) {

            // 解鎖

        }

    }

}

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);

    context.registerReceiver(mScreenReceiver, filter);

}

相關文章
相關標籤/搜索