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