如何通过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';
screenState
为true
(屏幕打开 )或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