如何使用adb喚醒Android - 我想在調試每個新版本的應用程序之前喚醒(如果睡着了)Android終端。使用adb或Eclipse喚醒Android(就在調試之前)?
典型流程是: 1.我在Eclipse中做了一些更改。 2.在此期間屏幕熄滅或不熄滅。 3.我運行「調試」,並希望強制屏幕喚醒。
我找到了一個「電源鍵」仿真的方法,但它沒有打開它,而是切換電源狀態。我不想向我的應用程序添加額外的代碼。有什麼其他的方法來做這樣的小事,請大家幫忙。
如何使用adb喚醒Android - 我想在調試每個新版本的應用程序之前喚醒(如果睡着了)Android終端。使用adb或Eclipse喚醒Android(就在調試之前)?
典型流程是: 1.我在Eclipse中做了一些更改。 2.在此期間屏幕熄滅或不熄滅。 3.我運行「調試」,並希望強制屏幕喚醒。
我找到了一個「電源鍵」仿真的方法,但它沒有打開它,而是切換電源狀態。我不想向我的應用程序添加額外的代碼。有什麼其他的方法來做這樣的小事,請大家幫忙。
您可以使用dumpsys power
命令通過adb檢查設備的當前電源狀態(包括顯示),並僅在顯示屏關閉的情況下發送電源按鍵事件。更簡單的解決方案將在「開發人員」選項中「完全連接到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中,通過該裝置設備要醒來。
非常好的解決方案。 – RichieHH 2014-07-17 15:23:31
這就是我想出了:
adb shell dumpsys power | grep "mScreenOn=true" | xargs -0 test -z && adb shell input keyevent 26
這會先檢查,看看是否在屏幕上。如果不是,它將模擬電源鍵,這將打開設備的屏幕。
這個命令的'xargs -0 test -z &&'部分是做什麼的?這是我的理解,請讓我知道,如果我是正確的: 'xargs -0'確認mScreenOn文本被成功「刷新」了 ,如果是這樣''&&' 'adb shell input keyevent 26' called?是否需要測試-z命令?如果是的話......它在做什麼? – 2014-11-23 01:31:50
隨着時間變化嗎?在kitkat和棒棒糖設備上沒有mScreenOn。 – rekire 2015-04-02 09:04:00
對於最新的API,請使用'adb shell dumpsys power | grep「Display Power:state = ON」| xargs -0 test -z && adb shell輸入關鍵事件26' – 2016-02-09 11:48:42
對於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的路徑)並鏈接到項目的屬性(構建器 - 導入 - )中。
我使用以下命令喚醒遠程設備進行自動化測試。如果屏幕未打開,則會按下電源按鈕,然後按下菜單按鈕。
(
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'
)
只需使用:
adb shell input keyevent 26
這一個是光滑的謝謝 – tsanzol 2015-07-13 04:44:18
26 == KEYCODE_POWER。還有一個KEYCODE_WAKE,如果設備已經醒來,它將不起作用。看到我的回答:http://stackoverflow.com/a/33683205/1172494 – 2015-11-12 23:15:15
adb shell input keyevent KEYCODE_WAKEUP
如上所述here,這個喚醒該設備。行爲有點像KEYCODE_POWER,但是如果設備已經醒來,它不起作用。
要切換休眠/喚醒一個命令就可以發出
adb shell input keyevent KEYCODE_POWER
我知道這是一個什麼樣的OP請求相反的,但我想指出的「真正睡着了」其他的定義讀者: 如果adb處於活動狀態,那麼設備並沒有真正睡着,因爲USB已打開並且命令提示符正在運行(adb shell將如何工作?)。當完全睡着時,只有物理電源按鈕會喚醒它(除非在BSP中選擇其他按鈕作爲喚醒源)。我的項目在屏幕關閉的情況下抽取大約120ma,但在睡眠模式下僅抽出23ma(斷開USB電纜)。「adb shell input keyevent 26」在此模式下不起作用。串行控制檯也沒有。 我的測試夾具可以分別訪問電池和外部電源線。我可以切換電源線(連接電池)將其喚醒。我還有一個切換USB集線器,專門爲測試的睡眠部分斷開USB。
我希望這可以對某人有所幫助。
如果您執行的是 adb shell input keyevent KEYCODE_POWER
並得到了Killed
,您應該先使用root用戶執行su
。
睡眠:(adb shell) input keyevent KEYCODE_SLEEP
喚醒:(adb shell) input keyevent KEYCODE_WAKEUP
切換:(adb shell) input keyevent KEYCODE_POWER
感謝的解決方案,我會寫一些小的腳本。是的,我可以禁用顯示超時「連接到USB」,但它停止充電更好,只是在調試之前切換,因爲它非常快。 – Chameleon 2013-02-08 22:58:51