使用adb或Eclipse唤醒Android(就在调试之前)?

时间:2013-02-08 12:29:44

标签: android adb android-debug

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

典型流程为: 1.我在Eclipse中做了一些更改。 2.在此期间屏幕是否熄灭。 3.我运行“debug”并希望强制屏幕唤醒。

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

9 个答案:

答案 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连接。

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