由於做乙個專案,需要判斷螢幕是否鎖屏,發現網上方法很多,但是比較雜,現在進行總結一下:
總共有兩類方法:
一、**直接判定
二、接收廣播
現在先說第一類方法(**直接判定):
1、通過powermanager的isscreenon方法,**如下:? 1
2
powermanager pm = (powermanager) context.getsystemservice(context.power_service);
boolean
isscreenon = pm.isscreenon();
//如果為true,則表示螢幕「亮」了,否則螢幕「暗」了。
注釋已經寫的很明白了,現在大概說一下,
螢幕「亮」,表示有兩種狀態:a、未鎖屏 b、目前正處於解鎖狀態 。這兩種狀態螢幕都是亮的
螢幕「暗」,表示目前螢幕是黑的 。
2、通過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
);
powermanager pm = (powermanager) context.getsystemservice(activity.power_service);
boolean
isscreenon= (boolean) mreflectscreenstate.invoke(pm);
}
catch
(exception e)
現在介紹第二類方法(接收系統的廣播):
接收系統廣播事件,螢幕在三種狀態(開屏、鎖屏、解鎖)之間變換的時候,系統都會傳送廣播,我們只需要監聽這些廣播即可。
**如下:?
12
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
else
if
(intent.action_screen_off.equals(action))
else
if
(intent.action_user_present.equals(action))
}
}
private
void
startscreenbroadcastreceiver()
Android 監聽螢幕鎖屏,使用者解鎖
public class screenlistener screen狀態廣播接收者 private class screenbroadcastreceiver extends broadcastreceiver else if intent.action screen off.equals acti...
android鎖屏喚醒並解鎖螢幕
1 這個方法是實現鎖屏狀態下喚醒手機,亮屏並解鎖螢幕 public static void wakeupandunlock context context 加入許可權 2 這個收集的 鎖屏 喚醒相關 private keyguardmanager km private keyguardlock kl...
android判斷手機螢幕橫豎屏
在乙個activity顯示中判斷當前螢幕橫豎屏情況有幾種方法 configuration configuration getresources getconfiguration if configuration.orientation configuration.orientation landsc...