2013-02-08 9 views
17

Wie wecken Android mit Verwendung adb - Ich möchte aufwachen (wenn schlafend) Android-Terminal vor dem Debuggen jeder neuen Version der Anwendung.Wake Android mit Verwendung von adb oder Eclipse (kurz vor dem Debuggen)?

Typischer Fluss ist: 1. Ich mache einige Änderungen in Eclipse. 2. In der Zwischenzeit geht der Bildschirm aus oder nicht. 3. Ich starte "debug" und will erzwingen Bildschirm zu wachen.

Ich habe eine Methode mit "Power Key" -Emulation gefunden, aber es schaltet sich nicht ein, sondern schaltet den Energiezustand um. Ich möchte meiner Anwendung keinen zusätzlichen Code hinzufügen. Was sind die anderen Methoden, um solche triviale Aufgabe zu tun, bitte helfen.

Antwort

2

Sie können den aktuellen Betriebszustand (einschließlich Display) des Geräts über adb mit dem Befehl dumpsys power überprüfen und nur dann das Ereignis drücken, wenn das Display ausgeschaltet ist. Die einfachere Lösung wäre, das Display-Zeitlimit in den Developer-Optionen vollständig zu deaktivieren, während es mit USB verbunden ist.

+0

Dank für Lösung werde ich einige kleine Skript schreiben. Ja, ich könnte das Display-Timeout deaktivieren, während es mit USB verbunden ist, aber es hört auf, besser zu laden, ist einfach vor Debug zu wechseln, da es sehr schnell ist. – Chameleon

3

Sie könnten auch die folgenden Flags zu Ihrem onCreate() in Ihrer Haupttätigkeit hinzu:

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); 

Auf diese Weise soll Ihr Gerät aufwacht, wenn es auf das Gerät durch Eclipse-geladen wird.

+0

sehr schöne Lösung. – RichieHH

8

Hier ist, was ich kam mit:

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

Dieser prüft zunächst, ob der Bildschirm eingeschaltet ist. Wenn dies nicht der Fall ist, wird der Power-Key emuliert, der den Bildschirm des Geräts einschaltet.

+0

Was macht der 'xargs -0 test -z &&' Teil dieses Befehls? Hier ist mein Verständnis, bitte lassen Sie mich wissen, wenn ich richtig bin: 'xargs-0' überprüft, dass der mScreenOn Text wurde erfolgreich" grepped " und wenn ja' && ' ' adb Shell Eingabe keyevent 26' heißt? Ist dazu der Test -z-Befehl nötig und wenn ja ... was macht er? –

+0

Hat sich das im Laufe der Zeit geändert? Auf einem Kitkat und auf einem Lollipop-Gerät gibt es kein mScreenOn. – rekire

+0

Verwenden Sie für die neueste API diese 'adb shell dumpsys power | grep "Anzeige Power: state = ON" | xargs -0 test -z & & adb shell eingabetaste ereignis 26' –

0

Für Windows und Eclipse Sie .bat Datei verwenden können:

@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 

Es wird überprüft, ob Bildschirm ausgeschaltet ist es, den Energiezustand wechseln. Um es mit Eclipse zu verwenden, sollte diese .bat-Datei als "Externes Werkzeug" verwendet werden (füllen Sie einfach den Pfad zur .bat) und verlinkt mit dem Projekt in seinen Eigenschaften (Builders - Import -).

0

Ich benutzte die folgenden, um entfernte Geräte für automatisierte Tests aufzuwecken. Wenn der Bildschirm nicht eingeschaltet ist, wird die Einschalttaste gefolgt von der Menü-Taste gedrückt.

(
    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

Verwenden Sie einfach:

adb shell input keyevent 26 
+0

dieser ist glatt danke – tsanzol

+0

26 == KEYCODE_POWER. Es gibt auch einen KEYCODE_WAKE, der keine Wirkung hat, wenn das Gerät bereits wach ist. Siehe meine Antwort: http://StackOverflow.com/a/33683205/1172494 –

22
adb shell input keyevent KEYCODE_WAKEUP 

Wie beschrieben here, weckt dies das Gerät nach oben. Benimmt sich etwas wie KEYCODE_POWER, hat aber keine Auswirkungen, wenn das Gerät bereits wach ist.

Um Schlaf/Wach mit einem Befehl wechseln Sie

adb shell input keyevent KEYCODE_POWER 
+0

Ich nach dem Code einfügen sagen "Killed". – rahman

+0

KEYCODE_WAKEUP hinzugefügt in API-Ebene 20 // ref: https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_WAKEUP – yurenchen

0

ausstellen kann ich wissen, dass dies das Gegenteil von dem, was der OP angefordert, aber ich wollte für andere die Definition von „wirklich schlafend“ darauf hinzuweisen, Leser: Wenn adb aktiv ist, ist das Gerät nicht wirklich eingeschlafen, da USB eingeschaltet ist und die Eingabeaufforderung ausgeführt wird (wie sonst funktioniert die adb-Shell?). Im eingeschlafenen Zustand wird nur der Netzschalter aktiviert (es sei denn, im BSP sind andere Tasten als Weckquelle ausgewählt). Mein Projekt zieht ca. 120mA bei ausgeschaltetem Bildschirm, aber nur 23mA im Schlafmodus (USB-Kabel trennen)."adb shell input keyevent 26" funktioniert in diesem Modus nicht. Genauso wenig wie die serielle Konsole. Mein Testgerät hat Zugriff auf die Batterie und die externe Stromleitung getrennt. Ich kann die Stromleitung (mit angeschlossener Batterie) umschalten, um sie aufzuwecken. Ich habe auch einen umgeschalteten USB-Hub, der den USB speziell für den Schlafteil des Tests trennt.

Ich hoffe, dass dies jemand Hilfe sein kann.

1

wenn Sie adb shell input keyevent KEYCODE_POWER und bekam Killed ausführen, sollten Sie Root-Benutzer verwenden, indem su vor auszuführen.

Schlaf: (adb shell) input keyevent KEYCODE_SLEEP

Wakeup: (adb shell) input keyevent KEYCODE_WAKEUP

Knebel: (adb shell) input keyevent KEYCODE_POWER