Hintergrund:
Ich verwende automatisierte Tests auf vielen verschiedenen Varianten von Geräten ( Samsung Tablets und Smartphones wie Galaxy A5, S8, S7 usw. ), wobei die Geräte unterschiedliche Versionen von Android haben ( 6.0, 6.0.1, 7.0 und 7.1.1 ) - alle in unterschiedlichen Kombinationen.
Einige meiner Tests erfordern das Sperren des Bildschirms (Ausschalten) und dann das Einschalten und die PIN-Eingabe. Ich konnte keinen (universellen) adb-Befehl finden, um den Status des Telefons abzurufen. Idealerweise möchte ich, dass mir ein Befehl mitteilt, in welchem der folgenden Zustände sich das Telefon befindet:
Meine bisher beste Lösung ist die Verwendung der folgenden 2 (Bash-Terminal) Befehle:
#1:
adb shell dumpsys display | grep "mScreenState"
#2:
adb shell service call trust 7
Befehl Nr. 1 sagt mir, ob der Bildschirm an, aus oder "gedöst" ist.
Befehl Nr. 2 sagt mir, ob das Telefon gesperrt oder entsperrt ist.
Fragen:
Gibt es einen einzelnen adb-Befehl, der mir die Informationen geben kann, die ich brauche? Ist dieser Befehl mit den oben aufgeführten Android-Versionen kompatibel?
Auf Android-Version 6.* zeigt Befehl #2 immer an, dass das Telefon gesperrt ist. Was ist die „Android 6.*-kompatible“ Alternative zu Befehl Nr. 2? ----> Rein zufällig fand ich heraus, dass "service call trust 6 " auf Android 6.- Geräten wie erwartet funktioniert!*
Notiz:
Die Ressource, die ich gefunden habe und die meinem Problem am ähnlichsten ist, ist die folgende SO-Frage/Antwort . Allerdings haben/verwenden nicht alle Geräte NFC, sodass der folgende Befehl (obwohl er mit den meisten Geräten/Versionen kompatibel ist) in meinen Tests nicht akzeptabel ist:
adb shell dumpsys nfc | grep 'mScreenState='
Da das Timing ein Problem darstellt, ist die vorgeschlagene Lösung (beste Antwort im Link) ebenfalls nicht akzeptabel.
Ich bin ein Windows-Fanboy, daher enthält die Lösung find
anstelle von grep
, ersetzen Sie einfach find durch grep.
adb shell dumpsys power | find "mWakefulness="
adb shell dumpsys power | find "mHoldingWakeLockSuspendBlocker="
Bildschirm AUS und gesperrt = mWakefulness= Schlafend & mHoldingWakeLockSuspendBlocker= false
Bildschirm EIN und gesperrt = mWakefulness= Awake & mHoldingWakeLockSuspendBlocker= false
Bildschirm EIN und entsperrt = mWakefulness= Awake & mHoldingWakeLockSuspendBlocker= true
PS: Ich habe es auf Android 7.0 getestet , weiß nicht, ob es mit anderen Versionen funktioniert.
Da ich kürzlich darauf gestoßen bin und die Verwendung des Daydream-Sperrbildschirms auf Android nicht erforderlich ist, sind hier einige neuere Variablen, die (wahrscheinlich) universell sind.
Sie sollten ab Android M (6.0 / API 23) verfügbar sein , da sie mit dem Doze-Modus ausgestattet sind. Ich habe sie mit Android 10 auf einem Samsung Galaxy Tab S4 und Android 12 auf einem Pixel 4 XL bestätigt .
$ adb shell dumpsys deviceidle | grep '\bm[A-Z]'
mLightEnabled=true mDeepEnabled=true
mForceIdle=false
mUseMotionSensor=true mMotionSensor={Sensor name="Significant Motion", vendor="Google", version=1, type=17, maxRange=1.0, resolution=1.0, power=0.25, minDelay=-1}
mScreenOn=false
mScreenLocked=true
mNetworkConnected=true
mCharging=false
mMotionActive=true
mNotMoving=false
mMotionListener.activatedTimeElapsed=36192
mLastMotionEventElapsed=0
mLocating=false mHasGps=false mHasNetwork=false mLocated=false
mState=INACTIVE mLightState=IDLE
mInactiveTimeout=+30m0s0ms
mNextAlarmTime=+22m36s283ms
mNextIdleDelay=+10m0s0ms (flex=+2m0s0ms)
mNextLightAlarmTime=-23s699ms
mCurLightIdleBudget=+1m0s0ms
Natürlich sind die Preisjuwelen hier mScreenOn
und mScreenLocked
, die boolesche Werte sind, die genau das tun, was Sie ihnen gegeben haben.
Sie könnten awk verwenden, um die gewünschte Antwort auszuspucken. Hier ist ein schnelles und schmutziges awk-Skript, das ich gerade entwickelt habe:
adb shell dumpsys power | awk -F"[ =]" '/mWakefulness=/ { mw=$NF; }
/mHoldingWakeLockSuspendBlocker=/ {mh=$NF;}
END {
print mw
print mh
}'
hat in Gibt es eine Möglichkeit zu überprüfen, ob der Bildschirm des Android-Geräts über adb gesperrt ist? - Stapelüberlauf und hierher kopieren:
XiaoMi 9
10
mDreamingLockscreen
adb shell dumpsys window | grep mDreamingLockscreen
mShowingDream=false mDreamingLockscreen=true mDreamingSleepToken=null
-> Bildschirm gesperrt
ON
oderOFF
mShowingDream=false mDreamingLockscreen=false mDreamingSleepToken=null
-> Bildschirm entsperrtnfc
(wenn Android NFC-Modul hat)adb shell dumpsys nfc | grep 'mScreenState='
mScreenState=OFF_LOCKED
-> Bildschirm AUS und gesperrtmScreenState=ON_LOCKED
-> Bildschirm EIN und gesperrtmScreenState=ON_UNLOCKED
-> Bildschirm EIN und entsperrt
ledwinder96
zwei