2013-02-08 126 views
17

如何使用adb喚醒Android - 我想在調試每個新版本的應用程序之前喚醒(如果睡着了)Android終端。使用adb或Eclipse喚醒Android(就在調試之前)?

典型流程是: 1.我在Eclipse中做了一些更改。 2.在此期間屏幕熄滅或不熄滅。 3.我運行「調試」,並希望強制屏幕喚醒。

我找到了一個「電源鍵」仿真的方法,但它沒有打開它,而是切換電源狀態。我不想向我的應用程序添加額外的代碼。有什麼其他的方法來做這樣的小事,請大家幫忙。

回答

2

您可以使用dumpsys power命令通過adb檢查設備的當前電源狀態(包括顯示),並僅在顯示屏關閉的情況下發送電源按鍵事件。更簡單的解決方案將在「開發人員」選項中「完全連接到USB」時禁用顯示超時。

+0

感謝的解決方案,我會寫一些小的腳本。是的,我可以禁用顯示超時「連接到USB」,但它停止充電更好,只是在調試之前切換,因爲它非常快。 – Chameleon 2013-02-08 22:58:51

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中,通過該裝置設備要醒來。

+0

非常好的解決方案。 – RichieHH 2014-07-17 15:23:31

8

這就是我想出了:

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

這會先檢查,看看是否在屏幕上。如果不是,它將模擬電源鍵,這將打開設備的屏幕。

+0

這個命令的'xargs -0 test -z &&'部分是做什麼的?這是我的理解,請讓我知道,如果我是正確的: 'xargs -0'確認mScreenOn文本被成功「刷新」了 ,如果是這樣''&&' 'adb shell input keyevent 26' called?是否需要測試-z命令?如果是的話......它在做什麼? – 2014-11-23 01:31:50

+0

隨着時間變化嗎?在kitkat和棒棒糖設備上沒有mScreenOn。 – rekire 2015-04-02 09:04:00

+0

對於最新的API,請使用'adb shell dumpsys power | grep「Display Power:state = ON」| xargs -0 test -z && adb shell輸入關鍵事件26' – 2016-02-09 11:48:42

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的路徑)並鏈接到項目的屬性(構建器 - 導入 - )中。

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' 
) 
15

只需使用:

adb shell input keyevent 26 
+0

這一個是光滑的謝謝 – tsanzol 2015-07-13 04:44:18

+0

26 == KEYCODE_POWER。還有一個KEYCODE_WAKE,如果設備已經醒來,它將不起作用。看到我的回答:http://stackoverflow.com/a/33683205/1172494 – 2015-11-12 23:15:15

22
adb shell input keyevent KEYCODE_WAKEUP 

如上所述here,這個喚醒該設備。行爲有點像KEYCODE_POWER,但是如果設備已經醒來,它不起作用。

要切換休眠/喚醒一個命令就可以發出

adb shell input keyevent KEYCODE_POWER 
+0

我插入代碼後說:「殺死」。 – rahman 2015-12-26 12:49:27

+0

在API級別20中添加KEYCODE_WAKEUP // ref:https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_WAKEUP – yurenchen 2017-09-02 00:37:02

0

我知道這是一個什麼樣的OP請求相反的,但我想指出的「真正睡着了」其他的定義讀者: 如果adb處於活動狀態,那麼設備並沒有真正睡着,因爲USB已打開並且命令提示符正在運行(adb shell將如何工作?)。當完全睡着時,只有物理電源按鈕會喚醒它(除非在BSP中選擇其他按鈕作爲喚醒源)。我的項目在屏幕關閉的情況下抽取大約120ma,但在睡眠模式下僅抽出23ma(斷開USB電纜)。「adb shell input keyevent 26」在此模式下不起作用。串行控制檯也沒有。 我的測試夾具可以分別訪問電池和外部電源線。我可以切換電源線(連接電池)將其喚醒。我還有一個切換USB集線器,專門爲測試的睡眠部分斷開USB。

我希望這可以對某人有所幫助。

1

如果您執行的是 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