android设置不锁屏adb,如何通过ADB锁定Android屏幕?

这篇博客讨论了如何使用ADB命令来锁定或解锁Android设备的屏幕。作者提供了多个解决方案,包括发送KEYCODE_POWER事件来模拟电源按钮操作,以及使用dumpsys power命令检查屏幕状态。还分享了一些bash脚本示例,这些脚本可以检查屏幕是否开启,并根据需要执行唤醒或锁定操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何通过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

参考资源链接:[ADB Shell Input Keyevent 完全指南](https://wenku.youkuaiyun.com/doc/312ggjtxt4?utm_source=wenku_answer2doc_content) Android设备上一个常见的操作,尤其在进行自动化测试或者演示时。要通过ADB的Shell Input Keyevent命令来模拟,可以使用KEYCODE_POWER(26)按键代码来模拟按下了电源键,通常这会触发设备的操作。然而,仅仅使用KEYCODE_POWER可能会立即锁定屏幕,因为Android系统可能需要一段时间来响应这一命令或者在特定的环境下才会触发。 为了确保能立即锁定屏幕,你可能需要模拟同时按下电源键和音量减小键,这可以通过两个keyevent命令结合使用来实现。具体来说,可以先发送KEYCODE_VOLUME_DOWN命令来确保设备进入状态,然后发送KEYCODE_POWER命令模拟按下电源键。以下是具体的命令示例: adb shell input keyevent 24 // 模拟音量减小键 adb shell input keyevent 26 // 模拟电源键 这两个命令通常需要连续发送,以模拟实际的用户操作。如果你需要在自动化脚本中实现这一操作,可能需要在发送命令后等待一段时间,以确保系统响应。 在使用这些命令时,务必确保ADB和目标设备连接正常,并且设备已开启USB调试模式。通过这种方式,开发者可以方便地在自动化脚本中控制Android设备的行为,从而满足特定的测试和演示需求。建议参阅《ADB Shell Input Keyevent 完全指南》,这本指南详细介绍了各种按键代码及其用途,能够帮助你在Android设备上实现更为复杂的自动化操作。 参考资源链接:[ADB Shell Input Keyevent 完全指南](https://wenku.youkuaiyun.com/doc/312ggjtxt4?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值