Как узнать, включен ли экран с помощью ADB

Я пытаюсь выяснить, можно ли определить, включен ли экран на устройстве Android с помощью ADB. Мне нужно знать это для некоторых тестов, которые я пытаюсь запустить, используя бегун обезьян. Есть ли команда оболочки, которую я могу ввести и, следовательно, включить как часть команды бегуна обезьян, которая точно скажет мне, включен ли экран или выключен?


person Andrew T.    schedule 28.01.2014    source источник
comment
stackoverflow.com/a/19612157/1778421   -  person Alex P.    schedule 28.01.2014
comment
@АлексП. Да, я пропустил это, когда искал этот ответ.   -  person Andrew T.    schedule 28.01.2014


Ответы (2)


Проведя некоторое тестирование, я обнаружил, что использование adb shell dumpsys power | grep mScreenOn будет работать на устройствах с номером версии 4.2+.

Команда, которая, как я обнаружил, работает на всех устройствах, которые я тестировал до сих пор, заключается в использовании:

 adb shell dumpsys input_method | grep mScreenOn

который будет производить что-то вроде:

mSystemReady=true mScreenOn=true

который вы можете использовать, чтобы определить, включен ли экран.

Протестировано на всех эмуляторах Android в диапазоне 2.2–4.4.2, Samsung Galaxy SII (4.0.4), Samsung Galaxy Tab 8.9 (4.0.4) и Nexus 4 с CM11.

Также стоит упомянуть, что на устройствах до 4.2 вы можете использовать команду adb shell dumpsys power | grep mPowerState, чтобы получить что-то вроде этого:

mIsPowered=true mPowerState=3 mScreenOffTime=24970 ms
mPowerState=SCREEN_BRIGHT_BIT SCREEN_ON_BIT

и определить, присутствует ли строка SCREEN_ON_BIT

person Carlo B.    schedule 28.01.2014
comment
В Lollipop (Nexus 6) первая команда отвечает mInteractive=true, когда экран включен, или mInteractive=false, когда он выключен; а вторая команда отвечает Display Power: state=ON при включении и state=OFF при выключенном экране. - person Joe; 19.02.2015
comment
На моем телевизоре Sony Bravia Android 8 dumpsys power нет mScreenOn. Но я вижу mWakefulness=Asleep, когда экран телевизора выключен, и mWakefulness=Awake, когда экран телевизора включен. - person Simon Kissane; 31.01.2021

Да, если вы введете:

 adb shell dumpsys power | grep mScreenOn

Это вернет истинное или ложное значение, указывающее, включен ли экран в данный момент. Это должно выглядеть так:

mScreenOn=true

Зная это, все, что вам нужно сделать, это проанализировать значение true/false из результата и передать команду оболочки в сценарий бегущего обезьяны.

Это было протестировано на устройстве Android с версией 4.4.2.

person Andrew T.    schedule 28.01.2014
comment
Служба дампа может различаться в зависимости от используемого вами устройства. На моем эмуляторе Nexus 4 мне нужно было сбросить input_method вместо power. - person Carlo B.; 28.01.2014
comment
@КарлоБ. Это также полезно знать, у меня есть физические Nexus 4 и 5, оба работают под управлением 4.4.2, оба будут реагировать на мощность dumpsys. Мне любопытно, относится ли ваша команда к эмулятору или к конкретной версии Android. - person Andrew T.; 29.01.2014