如何使用adb唤醒Android - 我想在调试每个新版本的应用程序之前唤醒(如果睡着了)Android终端。
典型流程为: 1.我在Eclipse中做了一些更改。 2.在此期间屏幕是否熄灭。 3.我运行“debug”并希望强制屏幕唤醒。
我找到了一种带有“电源键”仿真的方法,但它没有将其打开,而是切换电源状态。我不想在我的应用程序中添加额外的代码。有什么其他方法可以做这么琐碎的任务,请帮忙。
答案 0 :(得分:29)
adb shell input keyevent KEYCODE_WAKEUP
正如here所述,这会唤醒设备。行为有点像KEYCODE_POWER,但如果设备已经清醒则无效。
要使用一个命令切换睡眠/唤醒,您可以发出
adb shell input keyevent KEYCODE_POWER
答案 1 :(得分:16)
只需使用:
adb shell input keyevent 26
答案 2 :(得分:8)
这是我想出的:
adb shell dumpsys power | grep "mScreenOn=true" | xargs -0 test -z && adb shell input keyevent 26
首先检查屏幕是否亮起。如果不是,它将模拟电源键,这将打开设备的屏幕。
答案 3 :(得分:3)
您可以使用dumpsys power
命令通过adb检查设备的当前电源状态(包括显示),并仅在显示屏关闭时发送电源键按下事件。更简单的解决方案是在开发人员选项中“在连接到USB时”完全禁用显示超时。
答案 4 :(得分:3)
您还可以在主要活动的onCreate()
中添加以下标记:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
这样,您的设备在通过Eclipse加载到设备上时就会被唤醒。
答案 5 :(得分:3)
如果你执行
Killed
并获得su
,您应该先使用root用户执行(adb shell) input keyevent KEYCODE_SLEEP
。
睡眠:(adb shell) input keyevent KEYCODE_WAKEUP
唤醒:(adb shell) input keyevent KEYCODE_POWER
肘节:{{1}}
答案 6 :(得分:0)
对于Windows和Eclipse,您可以使用.bat文件:
@ECHO OFF
setlocal
for /f "delims= tokens=1*" %%a in ('adb shell dumpsys power ^| findstr.exe "mScreenOn="') DO (
for /f "delims== tokens=2*" %%S in ("%%a") do (
if "%%S" == "false" (goto move1) else (goto move2)
)
)
:move1
adb shell input keyevent 26
goto end
:move2
goto end
:end
exit
它将检查,如果屏幕关闭,它将切换电源状态。 要将它与Eclipse一起使用,这个.bat文件应该用作"外部工具" (只填充.bat的路径)并链接到项目的属性(Builders - Import - )。
答案 7 :(得分:0)
我使用以下方法唤醒远程设备进行自动化测试。如果屏幕未打开,则按下电源按钮,然后按菜单按钮。
(
cd ${platform-tools};
./adb shell dumpsys power | grep -i 'SCREEN_ON' >/dev/null;
if [ $? -eq 0 ]; then
echo "Screen is on...";
else
echo "Pressing buttons to wake-up...";
# http://developer.android.com/reference/android/view/KeyEvent.html
./adb shell input keyevent 26; # Power
./adb shell input keyevent 82; # Menu
echo "Pausing for state to settle...";
sleep 1;
./adb shell dumpsys power | grep -i 'SCREEN_ON';
fi;
echo '---';
./adb shell dumpsys power | grep -i 'SCREEN'
)
答案 8 :(得分:0)
我知道这与OP要求的相反,但我想为其他读者指出“真正睡着”的定义: 如果adb处于活动状态,那么设备并非真正睡眠,因为USB处于打开状态且命令提示符正在运行(adb shell如何运行?)。完全睡眠时,只有物理电源按钮才会将其唤醒(除非在BSP中选择其他按钮作为唤醒源)。我的项目在屏幕关闭时大约120ma,但在睡眠模式下只有23ma(断开USB电缆)。 “adb shell input keyevent 26”在此模式下不起作用。串行控制台也没有。 我的测试夹具可以单独访问电池和外部电源线。我可以切换电源线(连接电池)将其唤醒。我还有一个交换式USB集线器,可以专门为测试的睡眠部分断开USB连接。
我希望这对某人有所帮助。