如何通过ADB锁定Android屏幕?
有没有办法通过ADB锁定Android屏幕?
我找到了将显示锁定在apk中的方法,但是我想通过ADB从PC锁定屏幕,以模拟显示超时,而不必等待超时。
是否有可能做到这一点?
谢谢,黛安
8个解决方案
66 votes
太酷了,我刚发现KEYCODE_POWER是26。
因此它可以通过发送:
adb shell input keyevent 26
如果屏幕未锁定,则锁定屏幕。 如果屏幕已被锁定,它将唤醒设备。
我的猜测是,确保屏幕锁定(关闭)的唯一方法是解锁(我们使用keyevent 82(菜单),然后使用电源按钮keyevent对其进行锁定。是否有人知道这是真的吗?
PurpleDiane answered 2020-06-27T00:21:24Z
15 votes
Michael R. Hines提供了可以说是最简单的解决方案。 但是,以下行在更高版本的Android中没有用。
adb shell input keyevent 82 # unlock
我已经使用要唤醒的单个设备(平板电脑)的坐标更新了外壳脚本。 我的平板电脑不支持锁定屏幕事件的方向更改,因此值始终有效,因为锁定屏幕始终处于横向状态。 如果需要方向改变检测,则简单的if / 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
Rescue9 answered 2020-06-27T00:21:49Z
9 votes
这是一个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 keyevent 82 # unlock
echo "OK, should be on now."
else
echo "Screen is already on."
fi
Michael R. Hines answered 2020-06-27T00:22:09Z
6 votes
您已经找到了解决方案,但是无论如何我都会将此代码放在这里以供参考。
您可以做的是注入事件以两次“按下”电源按钮。 如果您不知道设备的状态(显示开/关),请检查屏幕当前是开还是关,然后相应地按电源按钮。
这是一个简单的monkeyrunner脚本:
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
Jakub Czaplicki answered 2020-06-27T00:22:38Z
3 votes
除了之前的答案,以下是我使用adb锁定/解锁屏幕的方法:
adb shell input keyevent number将锁定屏幕。
因此,如果您再次执行该命令,则在屏幕关闭/锁定时,它将打开/解锁。
adb shell input keyevent 3还将解锁屏幕(如果屏幕被锁定)。
此外,我还测试了所有命令,例如adb shell input keyevent number,发现adb shell input keyevent 3也可以解锁设备。
我还发现(通过测试)键3是主页按钮。 因此,如果您有物理主页按钮(而不是屏幕上的软主页按钮),则也可以使用此按钮来解锁设备。
Lloyd Dominic answered 2020-06-27T00:23:21Z
1 votes
对于使用android早期版本(至少4.2+)的用户,screenState具有不同的输出。
我没有使用true作为@Jakub Czaplicki给出的答案,而是使用false。
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(屏幕打开)或2940705656036393393986(屏幕关闭)。
António Almeida answered 2020-06-27T00:23:49Z
1 votes
您可以使用以下命令触发显示ON。亚行外壳输入keyevent POWER
我尝试过并正在我的项目中使用,希望它对您有用。
这是我使用的红宝石代码:
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
Swapan Chhabra answered 2020-06-27T00:24:18Z
1 votes
这是一个脚本,用于为每个连接的设备(包括任何棒棒糖设备)打开/关闭屏幕。 在运行任何已连接的Android测试之前,我将在我的Jenkins服务器上使用此工具,以确保设备已准备就绪。 希望有人觉得这有用!
#!/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
Victor Rendina answered 2020-06-27T00:24:38Z