27

如何使用 adb 唤醒 Android - 我想在调试每个新版本的应用程序之前唤醒(如果睡着了)Android 终端。

典型的流程是: 1. 我在 Eclipse 中做了一些更改。2.同时屏幕是否熄灭。3.我运行“调试”并希望强制屏幕唤醒。

我找到了一种带有“电源键”仿真的方法,但它并没有打开它,而是切换了电源状态。我不想在我的应用程序中添加额外的代码。还有什么其他方法可以完成这种琐碎的任务,请帮忙。

4

9 回答 9

45
adb shell input keyevent KEYCODE_WAKEUP

如此处所述,这会唤醒设备。行为有点像 KEYCODE_POWER 但如果设备已经唤醒,它就没有效果。

要使用一个命令切换睡眠/唤醒,您可以发出

adb shell input keyevent KEYCODE_POWER
于 2015-11-12T23:14:27.340 回答
17

只需使用:

adb shell input keyevent 26
于 2015-03-10T12:40:59.510 回答
9

这是我想出的:

adb shell dumpsys power | grep "mScreenOn=true" | xargs -0 test -z && adb shell input keyevent 26

这将首先检查屏幕是否打开。如果不是,它将模拟电源键,这将打开设备的屏幕。

于 2014-08-26T14:06:08.677 回答
5

如果你执行 adb shell input keyevent KEYCODE_POWER并得到了Killed,你应该在执行su之前使用root用户。

睡觉:(adb shell) input keyevent KEYCODE_SLEEP

醒来:(adb shell) input keyevent KEYCODE_WAKEUP

切换:(adb shell) input keyevent KEYCODE_POWER

于 2017-08-14T20:57:50.097 回答
3

您可以使用命令通过 adb 检查设备的当前电源状态(包括显示器),dumpsys power并仅在显示器关闭时发送电源键按下事件。更简单的解决方案是在开发人员选项中“连接到 USB 时”完全禁用显示超时。

于 2013-02-08T18:43:30.623 回答
2

您还可以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 加载到设备上时,您的设备应该会被唤醒。

于 2014-01-28T13:11:25.633 回答
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 - )。

于 2014-09-20T10:43:23.050 回答
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'
)
于 2015-01-28T09:16:47.050 回答
0

我知道这与 OP 要求的相反,但我想为其他读者指出“真正睡着”的定义:如果 adb 处于活动状态,则设备不是真正睡着,因为 USB 已打开并且命令提示符正在运行(adb shell 还能如何工作?)。当完全睡眠时,只有物理电源按钮会唤醒它(除非在 BSP 中选择了其他按钮作为唤醒源)。我的项目在屏幕关闭的情况下绘制了大约 120ma,但在睡眠模式下只有 23ma(断开 USB 电缆)。“adb shell input keyevent 26”在此模式下不起作用。串行控制台也没有。我的测试夹具确实可以单独使用电池和外部电源线。我可以切换电源线(连接电池)来唤醒它。

我希望这可以对某人有所帮助。

于 2017-06-23T22:50:16.707 回答