Wie kann man auf das Gerät warten, bis der Startbildschirm angezeigt wird?

Ich muss meinen Bildschirm mit adb entsperren, und Wait-for-Device wird viel zu früh beendet (wenn das Gerät hochfährt), und das Entsperren des Bildschirms schlägt fehl. Gibt es eine Möglichkeit, den Startbildschirm zu erkennen, damit ich den Bildschirm dann entsperren kann?

Dies ist der Befehl, den ich zum Entsperren des Bildschirms verwende -

adb wait-for-device shell input keyevent 82

Antworten (3)

gut wait-for-device, wie Sie bereits festgestellt haben, wartet nur, bis der adb-Daemon ordnungsgemäß gestartet wurde. Dies ist bereits zur Initialisierungszeit. Um nach einem vollständigen Start zu suchen, können Sie Ihrem Skript Folgendes hinzufügen:

im Pseudo:

  1. Wait-for-device
  2. solange getprop sys.boot_completed != 1 einige Sekunden ruht, überprüfen Sie getprop sys.boot_completed erneut
  3. Shell-Eingabe Keyevent 82

Das sollte funktionieren.

Etwas wie das:

#!/bin/bash

adb wait-for-device

A=$(adb shell getprop sys.boot_completed | tr -d '\r')

while [ "$A" != "1" ]; do
        sleep 2
        A=$(adb shell getprop sys.boot_completed | tr -d '\r')
done

adb shell input keyevent 82

Dies ist nicht getestet, also seien Sie sich möglicher Fehler bewusst

Bitte bearbeiten Sie Ihre Antwort so, dass sie leicht lesbar ist. Sie haben eine gültige Antwort, aber ein wenig Klarheit würde allen helfen. Vielen Dank
Antwort ist jetzt bearbeitet. Hoffe das hilft dir :)
gute Antwort +1, jetzt können andere ihr folgen. Vergessen Sie nicht, für diese zufälligen Momente " Immer eine Sicherung durchführen " hinzuzufügen;)
Ich fand, dass das Ergebnis getpropeinen Wagenrücklauf hatte, also änderte ich den adbBefehl in, um $(adb shell getprop sys.boot_completed | tr -d '\r')den Trick zu machen. Dies ist nur das Trimmen des Wagenrücklaufzeichens.
@divided-by-zero Bitte ändern Sie Ihre Antwort so, dass sie das von CoatedMoose erwähnte Trimmen enthält. Umang, akzeptiere es bitte auch als Antwort.
Trimmen wird hinzugefügt. thx CoatedMoose
Wie würden Sie dies ändern, wenn mehr als ein Gerät/Emulator läuft?

Dies ist eine alte Frage und ein grenzwertiges Off-Topic, aber hier ist, wie man es in einer einzigen Zeile macht:

adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done; input keyevent 82'

Hier ist, was ich mir ausgedacht habe:

adb wait-for-device shell <<ENDSCRIPT
echo -n "Waiting for device to boot "
echo "" > /data/local/tmp/zero
getprop dev.bootcomplete > /data/local/tmp/bootcomplete
while cmp /data/local/tmp/zero /data/local/tmp/bootcomplete; do 
{
    echo -n "."
    sleep 1
    getprop dev.bootcomplete > /data/local/tmp/bootcomplete
}; done
echo "Booted."
exit
ENDSCRIPT

echo "Waiting 30 secs for us to be really booted"
sleep 30

echo "Unlocking screen"
adb shell "input keyevent 82"