adb检测屏幕是否锁屏的判断方式
通过adb shell dumpsys window policy 查看屏幕状态
1、亮屏且有锁 showing=true和 screenState=SCREEN_STATE_ON
KeyguardServiceDelegate
showing=true
showingAndNotOccluded=true
inputRestricted=false
occluded=false
secure=true
dreaming=false
systemIsReady=true
deviceHasKeyguard=true
enabled=true
offReason=OFF_BECAUSE_OF_USER
currentUser=-10000
bootCompleted=true
screenState=SCREEN_STATE_ON
2、灭屏且有锁 showing=true和 screenState=SCREEN_STATE_OFF
KeyguardServiceDelegate
showing=true
showingAndNotOccluded=true
inputRestricted=false
occluded=false
secure=true
dreaming=false
systemIsReady=true
deviceHasKeyguard=true
enabled=true
offReason=OFF_BECAUSE_OF_TIMEOUT
currentUser=-10000
bootCompleted=true
screenState=SCREEN_STATE_OFF
3、亮屏且无锁 showing=false和screenState=SCREEN_STATE_ON
KeyguardServiceDelegate
showing=false
showingAndNotOccluded=true
inputRestricted=false
occluded=false
secure=true
dreaming=false
systemIsReady=true
deviceHasKeyguard=true
enabled=true
offReason=OFF_BECAUSE_OF_TIMEOUT
currentUser=-10000
bootCompleted=true
screenState=SCREEN_STATE_ON
部分手机亮屏显示标识有区别 ,例如华为 screenState=2
KeyguardServiceDelegate
showing=false
showingAndNotOccluded=true
inputRestricted=false
occluded=false
secure=true
dreaming=false
systemIsReady=true
deviceHasKeyguard=true
enabled=true
offReason=2
currentUser=-10000
bootCompleted=true
screenState=2
代码
def is_screen_lock(id):
# ----------------------
# 检测屏幕是否被锁,不同于屏幕点亮, 判断亮屏请使用 adbutils.is_screen_on
# ----------------------
try:
command = 'adb -s ' + id + " shell dumpsys window policy"
result = os.popen(command)
lines = result.readlines()
loc_flag = 0
for i in range(len(lines)):
if 'KeyguardServiceDelegate'.strip() in lines[i]:
loc_flag = i + 1
if 'showing=true' in lines[loc_flag] and loc_flag != 0:
return True
else:
return False
except Exception as e:
print('获取手机lock状态异常',e)
return False
该博客介绍了如何利用ADB shell命令`dumpsys window policy`来判断Android设备的屏幕是否被锁定。当`showing=true`且`screenState=SCREEN_STATE_ON`表示亮屏且有锁,`screenState=SCREEN_STATE_OFF`表示灭屏且有锁,`showing=false`则表示亮屏无锁。此外,还提到了华为设备中可能遇到的特殊情况,即`screenState=2`代表亮屏状态。
4537

被折叠的 条评论
为什么被折叠?



