Подтвердить что ты не робот

Как заблокировать экран Android через ADB?

Есть ли способ заблокировать экран Android через АБР?

Я нахожу способы блокировки отображения в apk, но я хочу заблокировать экран с ПК через ADB, чтобы имитировать тайм-аут отображения, не дожидаясь таймаута.

Можно ли это сделать?

Спасибо, Дайан

4b9b3361

Ответ 1

Прохладный, я нашел KEYCODE_POWER, который равен 26.

поэтому он работает, отправив:

adb shell input keyevent 26

который блокирует экран, если экран разблокирован. Если экран уже заблокирован, он пробуждает устройство.

Я предполагаю, что единственный способ убедиться, что экран заблокирован (выключен), - это разблокировать (мы используем keyevent 82 (menu), а затем запираем его клавишей с клавишей питания. Кто-нибудь есть идея, если это правда?

Ответ 2

Майкл Р. Хайнс дал то, что, возможно, является самым простым решением. Однако следующая версия не подходит для более поздних версий Android.

adb shell input keyevent 82 # unlock

Я обновил оболочку script, используя координаты для отдельного устройства, которое я хочу проснуться (планшет). Мой планшет не поддерживает изменения ориентации для событий lockscreen, поэтому значения всегда работают, поскольку lockscreen всегда находится в ландшафте. Если вам требуется определение изменения ориентации, простое, если /then/else будет достаточно для выбора правильных координат для использования для ориентации.

#!/bin/bash
if [ "$(adb shell dumpsys power | grep mScreenOn= | grep -oE '(true|false)')" == false ] ; then
    echo "Screen is off. Turning on."
    adb shell input keyevent 26 # wakeup
    adb shell input touchscreen swipe 930 380 1080 380 # unlock
    echo "OK, should be on now."
else 
    echo "Screen is already on."
    echo "Turning off."
    adb shell input keyevent 26 # sleep
fi

Ответ 3

Здесь все в одном bash script, которое проверяет, действительно ли экран включен или нет, а затем просыпается и разблокирует экран одним выстрелом:

if [ "$(adb shell dumpsys power | grep mScreenOn= | grep -oE '(true|false)')" == false ] ; then
    echo "Screen is off. Turning on."
    adb shell input keyevent 26 # wakeup
    adb shell input keyevent 82 # unlock
    echo "OK, should be on now."
else 
    echo "Screen is already on."
fi

Ответ 4

Вы уже нашли решение, но я все равно поставлю этот код для справки.

Что вы можете сделать, это ввести событие, чтобы дважды нажать кнопку питания. Если вы не знаете статус устройства (включение/выключение дисплея), проверьте, включен или выключен экран, и нажмите кнопку питания соответственно.

Вот простой обезьянник script:

import re
from java.util import *
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
device = MonkeyRunner.waitForConnection()       # connect to a device
device.shell("input keyevent KEYCODE_POWER")    # turn screen off (or on?)
res = device.shell("dumpsys power")             # fetch power state
m = re.search(r'.*mPowerState=([0-9]+).*', res) # parse the string
if m and int(m.group(1)) == 0:                  # screen is off
  device.shell("input keyevent KEYCODE_POWER")  # turn the screen on

Ответ 5

Для тех, кто использует более ранние версии android (как минимум, 4.2+), dumpsys power имеет другой вывод.
Вместо использования mPowerState= в качестве ответа, данного @Jakub Czaplicki, я использовал mScreenOn=.

p = Runtime.getRuntime().exec("su", null, null);
OutputStream o = p.getOutputStream();
o.write(("dumpsys power").getBytes("ASCII"));
o.flush();
o.close();
p.waitFor();

boolean screenState;
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((res = in.readLine()) != null) dump += res;
screenState = dump.charAt( dump.indexOf("mScreenOn=") + 10 ) == 't';

screenState - true (экран на) или false (экран выключен).

Ответ 6

Вы можете использовать следующую команду для включения отображения ВКЛ. входная плата adb keyentent POWER

Я пробовал и использую в своем проекте, надеюсь, он сработает для вас.

И вот код ruby, который я использовал:

def ScreenCheck()
system("adb shell dumpsys power > c:/interact.log")

File.open("C:\\interact.log").each do |line|
    if line[/mScreenOn/]
        if line.strip == "mScreenOn=true"
            p "Screen is On, Starting execution.."
        else
            p "Screen is Off, starting screen.."
            system("adb shell input keyevent = POWER")
            p "Starting execution.."
        end
    end
end
end

Ответ 7

В дополнение к ответам раньше, вот что я делаю, чтобы заблокировать/разблокировать свой экран с помощью adb:

adb shell input keyevent 26 заблокирует экран.
Итак, если вы снова запустите эту команду, пока экран выключен/заблокирован, он будет включен/разблокирован.
adb shell input keyevent 26 также разблокирует экран (если экран заблокирован).

Кроме того, я также проверил все команды, такие как adb shell input keyevent number, и выяснил, что adb shell input keyevent 3 также разблокирует устройство.

Я также узнал (путем тестирования), что клавиша 3 является кнопкой "домой". Итак, если у вас есть кнопка физического дома (а не кнопка мягкого дома на экране), вы также можете использовать ее для разблокировки своего устройства.

Ответ 8

Здесь script включает/выключает экран для каждого подключенного устройства, включая любые устройства с предварительным леоптипом. Я использую это на своем сервере Jenkins прямо перед запуском любых подключенных тестов Android, чтобы убедиться, что устройства готовы к работе. Надеюсь, кто-то найдет это полезным!

#!/bin/sh

# Returns the power state of the screen 1 = on, 0 = off
getDisplayState() {
    state=$(adb -s $1 shell dumpsys power | grep mScreenOn= | grep -oE '(true|false)')

    # If we didn't get anything it might be a pre-lollipop device
    if [ "$state" = "" ]; then
        state=$(adb -s $1 shell dumpsys power | grep 'Display Power' | grep -oE '(ON|OFF)')
    fi

    if [ "$state" = "ON" ] || [ "$state" = "true" ]; then
        return 1;
    else
        return 0;
    fi
}

echo "Turning on screen on all connected devices..."

for device in `adb devices | grep device$ | cut -f1`
do
    echo -n "Found device: $device ... "

    getDisplayState $device
    state=$?

    # If the display is off, turn it on
    if [ $state -eq 0 ]; then
        echo "display was off, turning on"
        adb -s $device shell input keyevent 26
    else
        echo "display was on"
    fi

done