如何使用 adb 唤醒 Android - 我想在调试每个新版本的应用程序之前唤醒(如果睡着了)Android 终端。
典型的流程是: 1. 我在 Eclipse 中做了一些更改。2.同时屏幕是否熄灭。3.我运行“调试”并希望强制屏幕唤醒。
我找到了一种带有“电源键”仿真的方法,但它并没有打开它,而是切换了电源状态。我不想在我的应用程序中添加额外的代码。还有什么其他方法可以完成这种琐碎的任务,请帮忙。
如何使用 adb 唤醒 Android - 我想在调试每个新版本的应用程序之前唤醒(如果睡着了)Android 终端。
典型的流程是: 1. 我在 Eclipse 中做了一些更改。2.同时屏幕是否熄灭。3.我运行“调试”并希望强制屏幕唤醒。
我找到了一种带有“电源键”仿真的方法,但它并没有打开它,而是切换了电源状态。我不想在我的应用程序中添加额外的代码。还有什么其他方法可以完成这种琐碎的任务,请帮忙。
adb shell input keyevent KEYCODE_WAKEUP
如此处所述,这会唤醒设备。行为有点像 KEYCODE_POWER 但如果设备已经唤醒,它就没有效果。
要使用一个命令切换睡眠/唤醒,您可以发出
adb shell input keyevent KEYCODE_POWER
只需使用:
adb shell input keyevent 26
这是我想出的:
adb shell dumpsys power | grep "mScreenOn=true" | xargs -0 test -z && adb shell input keyevent 26
这将首先检查屏幕是否打开。如果不是,它将模拟电源键,这将打开设备的屏幕。
如果你执行
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
您可以使用命令通过 adb 检查设备的当前电源状态(包括显示器),dumpsys power
并仅在显示器关闭时发送电源键按下事件。更简单的解决方案是在开发人员选项中“连接到 USB 时”完全禁用显示超时。
您还可以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 加载到设备上时,您的设备应该会被唤醒。
对于 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 - )。
我使用以下方法唤醒远程设备进行自动化测试。如果屏幕没有打开,那么它将按电源按钮,然后按菜单按钮。
(
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'
)
我知道这与 OP 要求的相反,但我想为其他读者指出“真正睡着”的定义:如果 adb 处于活动状态,则设备不是真正睡着,因为 USB 已打开并且命令提示符正在运行(adb shell 还能如何工作?)。当完全睡眠时,只有物理电源按钮会唤醒它(除非在 BSP 中选择了其他按钮作为唤醒源)。我的项目在屏幕关闭的情况下绘制了大约 120ma,但在睡眠模式下只有 23ma(断开 USB 电缆)。“adb shell input keyevent 26”在此模式下不起作用。串行控制台也没有。我的测试夹具确实可以单独使用电池和外部电源线。我可以切换电源线(连接电池)来唤醒它。
我希望这可以对某人有所帮助。