如何通过ADBlockingAndroid屏幕?

有没有办法通过ADBlockingAndroid屏幕?

我find了在apk中locking显示的方法,但是我想通过ADBlockingPC的屏幕来模拟显示超时,而不必等待超时。

是否有可能做到这一点?

谢谢,黛安

很酷,我刚刚find了KEYCODE_POWER这是26。

所以它通过发送:

 adb shell input keyevent 26 

如果屏幕被解锁,则locking屏幕。 如果屏幕已被locking,则唤醒设备。

我的猜测是确保屏幕locking(closures)的唯一方法是解锁(我们使用keyevent 82(menu),然后用电源buttonkeyeventlocking它。有没有人知道这是真的吗?

迈克尔·R·海因斯给出了可以说是最简单的解决scheme。 但是,以下版本在Android的更高版本中并不适用。

 adb shell input keyevent 82 # unlock 

我已经使用坐标为我想要唤醒的单个设备(Tablet)更新了shell脚本。 我的平板电脑不支持locking屏幕事件的方向更改,所以这些值始终工作,因为locking屏幕始终处于横向模式。 如果你需要方向改变检测,一个简单的if / then / else就可以select正确的坐标用于定位。

 #!/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 

下面是一个单一的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 

你已经find了一个解决scheme,但是我会把这个代码放在这里作为参考。

你可以做的是注入事件“按下”电源button两次。 如果您不知道设备状态(显示开/关),请检查屏幕当前是否处于打开状态,然后按相应的电源button。

这是一个简单的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 

对于那些使用早期版本的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'; 

screenStatetrue (屏幕打开false (屏幕closures

您可以使用以下命令触发显示ON。 adb shellinputkeyevent 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 

除了之前的答案,这里是我做什么来locking/解锁我的屏幕使用adb:

adb shell input keyevent 26将locking屏幕。
所以,如果你再次执行这个命令,当屏幕closures/locking时,它将被打开/解锁。
adb shell input keyevent 26也会解锁屏幕(如果屏幕被locking)。

此外,我还testing了所有的命令,如adb shell input keyevent number ,发现adb shell input keyevent 3也解锁了设备。

我还发现(通过testing)键3是主页button。 所以,如果你有一个物理的主页button(不是屏幕上的软主页button),你也可以使用它来解锁你的设备。

这是一个脚本来打开/closures每个连接的设备,包括任何预棒棒糖设备的屏幕。 我在运行任何连接的Androidtesting之前,在我的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