一、文檔概述
在對Android設(shè)備操作之前崖蜜,經(jīng)常需要通過adb獲取一些設(shè)備基本信息。尤其是在全自動運行過程中客峭,盡量減少人工的干預(yù)豫领。本文檔記錄了檢查手機屏幕的狀態(tài)以及解鎖的方式。
二舔琅、技術(shù)基礎(chǔ)
在項目開發(fā)過程中等恐,會經(jīng)常用到adb對設(shè)備進(jìn)行操作或者獲取一些基本信息。其中對屏幕解鎖以及獲取屏幕狀態(tài)也是比較重要的备蚓。
已知的操作方式课蔬,通過adb命令模擬按鍵事件。
// 點亮屏幕
adb shell input keyevent 26
// 嘗試解鎖
adb shell input keyevent 82
其中關(guān)于更多的按鍵事件介紹:adb命令模擬按鍵事件 KeyCode
通過adb按鍵事件可以實現(xiàn)基本的點亮屏幕以及基本的解鎖操作〗汲ⅲ現(xiàn)在存在一個問題二跋,如何判斷什么時候需要點擊電源按鈕點亮屏幕呢?
三流昏、實現(xiàn)細(xì)節(jié)
通過第二部分的描述扎即,我們已經(jīng)可以實現(xiàn)基本的操作,但是現(xiàn)在的問題在于什么情況下需要進(jìn)行電源操作况凉。
查詢資料發(fā)現(xiàn):Android adb調(diào)試命令集合
關(guān)于屏幕的信息應(yīng)該在這個命令內(nèi)有描述谚鄙。再結(jié)合:檢測手機屏幕是否亮屏解鎖
經(jīng)過測試發(fā)現(xiàn),的確可以判斷屏幕是否點亮茎刚,但是代碼邏輯并不完善襟锐,還存在點亮未解鎖的情況撤逢。
現(xiàn)在需要判斷鎖屏狀態(tài)下屏幕是否點亮膛锭。
通過控制變量的方式,輸出信息做對比蚊荣。
熄屏狀態(tài)得到的窗口策略信息:
屏幕點亮狀態(tài)下獲取到的窗口策略信息:
通過對兩次輸出做對比:
因此初狰,只要判斷如下代碼即可區(qū)分出屏幕狀態(tài):
mScreenOnEarly=false mScreenOnFully=false mOrientationSensorEnabled=false
其中,三個變量只需要比對一個即可互例。當(dāng)值為true表示屏幕已點亮奢入。
通過判斷以上輸出即可決定是否需要執(zhí)行屏幕點亮的操作了。
四媳叨、工程代碼
Python示例代碼:
stdout, stderr = CmdUtils.runCmd('adb shell dumpsys window policy', True)
if 'mShowingLockscreen=true' in stdout:
if 'mScreenOnEarly=false' in stdout:
os.system('adb shell input keyevent 26')
os.system('adb shell input keyevent 82')
注:CmdUtils.runCmd() 函數(shù)為獲取cmd命令的輸出結(jié)果
五腥光、小結(jié)
關(guān)于adb的功能关顷,看來我還是知之甚少啊。繼續(xù)學(xué)習(xí)adb武福,強大到讓你懷疑自己议双。