1. 程式人生 > >【自動化】獲取手機的螢幕狀態

【自動化】獲取手機的螢幕狀態

只有擁有坐上牌桌的能力,才有博弈的機會...

可能在Android測試過程中有很多需要獲取的元素,比如這個手機的螢幕狀態,除了可以用開發APK API(Java)實現獲取鎖屏狀態外也可以通過adb命令獲取手機是否鎖屏狀態,當然這種使用的adb的方式可以用python來封裝。

對於手機各種資料的獲取,一般要麼來自靜態配置檔案,要麼來自動態的service動態資料

手機螢幕狀態這種動態的可以通過一個window的服務來獲取,執行指令:
adb shell dumpsys window policy | findstr isStatusBarKeyguard   (守衛者狀態:電源鍵)
adb shell dumpsys window policy | findstr mShowingLockscreen  (顯示鎖定螢幕)
已解鎖狀態值:  
isStatusBarKeyguard=false  (true時:手機鎖屏;false時:手機解鎖)
mShowingLockscreen=true       (true時:手機鎖屏;false時:手機解鎖)
如果出現以上2指令有一條指令輸出值空,一般不會出現空置的情況,如果有可以通過下面截圖中的幾個欄位:




程式碼實現:
   def is_screen_locked(self, sno):
        """
        檢視當前手機螢幕是什麼狀態:鎖屏(0,1) * 亮黑(0,1)
        三種情況需要考慮
        2:黑屏上鎖、0:亮屏解鎖、1:亮屏上鎖
        四種情況去考慮就是有無鎖、是否亮屏,我覺得還是按其中來吧
        10:鎖黑、11:鎖亮、01:開亮、00:開黑
        adb shell dumpsys window policy | grep isStatusBarKeyguard 確認是否有鎖
        adb shell dumpsys window policy | grep ScreenOn 是否亮屏
        """
        window_policy = self.shell(sno, "dumpsys window policy").stdout.read()
        locked_status = re.findall(r"isStatusBarKeyguard=(\w+)", window_policy)[0]
        bright_status = re.findall(r"mScreenOnFully=(\w+)", window_policy)[0]

        if locked_status == 'true' and bright_status == 'true':
            return "11"
        elif locked_status == 'true' and bright_status == 'false':
            return "10"
        elif locked_status == 'false' and bright_status == 'false':
            return "00"
        elif locked_status == 'false' and bright_status == 'true':
            return "01"

備註:整理筆記,發現新問題