4 votes

Commande(s) Adb pour obtenir l'état de l'écran et l'état verrouillé

Le contexte :

J'utilise des tests automatisés sur de nombreuses variantes d'appareils ( Tablettes et smartphones Samsung tels que Galaxy A5, S8, S7, etc. ) où les appareils ont des versions différentes d'Android ( 6.0, 6.0.1, 7.0 et 7.1.1 ) - le tout dans des combinaisons variées.

Certains de mes tests nécessitent de verrouiller l'écran (l'éteindre), puis de l'allumer et de saisir un code PIN. Je n'ai pas été en mesure de trouver une commande adb (universelle) pour obtenir l'état des téléphones. Idéalement, je voudrais un commande pour me dire dans lequel des états suivants le téléphone se trouve :

  1. Écran éteint (on suppose qu'il est également verrouillé)
  2. Écran allumé, verrouillé
  3. Écran allumé, déverrouillé

Ma meilleure solution jusqu'à présent est d'utiliser les 2 commandes suivantes (terminal bash) :

#1:
adb shell dumpsys display | grep "mScreenState"

#2:
adb shell service call trust 7

La commande n°1 m'indique si l'écran est allumé, éteint ou "assoupi".

La commande n°2 me dit si le téléphone est verrouillé ou déverrouillé.

質問です。

Existe-t-il une seule commande adb qui puisse me donner les informations dont j'ai besoin ? Cette commande est-elle compatible avec les versions d'Android énumérées ci-dessus ?

Sur Android version 6.* commande #2 toujours indique que le téléphone est verrouillé. Quelle est l'alternative "compatible Android 6.*" de la commande n°2 ? ----> Par pur hasard, j'ai trouvé ce "service de confiance". 6 "fonctionne comme prévu sous Android 6. des appareils!*

Nota:

La ressource que j'ai trouvée qui ressemble le plus à mon problème est la suivante Question/réponse sur le SO . Cependant, tous les appareils n'ont pas/utilisent le NFC, donc la commande suivante (bien que compatible avec la plupart des appareils/versions) n'est pas acceptable dans mes tests :

adb shell dumpsys nfc | grep 'mScreenState='

Puisque le timing est un problème, la solution proposée (meilleure réponse dans le lien) n'est pas acceptable non plus.

3voto

Scott Points 3238

Je suis un fanboy de Windows, donc la solution contient find au lieu d'utiliser grep remplacez simplement find par grep.

adb shell dumpsys power | find "mWakefulness="
adb shell dumpsys power | find "mHoldingWakeLockSuspendBlocker=" 

Écran OFF y Verrouillé \= mWakefulness= Asleep & mHoldingWakeLockSuspendBlocker= faux

Écran ON y Verrouillé \= mWakefulness= Awake & mHoldingWakeLockSuspendBlocker= faux

Écran ON y Déverrouillé \= mWakefulness= Awake & mHoldingWakeLockSuspendBlocker= vrai

P.S : Je l'ai testé sur Android 7.0 Je ne sais pas si cela fonctionnera avec d'autres versions.

1voto

towo Points 111

Comme j'ai rencontré ce problème récemment et que l'utilisation de l'écran de verrouillage Daydream n'est pas obligatoire sur Android, voici quelques nouvelles variables qui sont (probablement) universelles.

Ils devrait sera disponible à partir de Android M (6.0 / API 23) depuis qu'ils sont livrés avec le mode Doze. confirmé Ils ont utilisé Android 10 sur une Samsung Galaxy Tab S4 et Android 12 sur un Pixel 4 XL.

$ 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

Bien sûr, les joyaux du prix ici sont mScreenOn y mScreenLocked qui sont des booléens faisant exactement ce que vous leur avez demandé.

0voto

genevera Points 1

Vous pouvez utiliser awk pour obtenir la réponse que vous voulez. Voici un script awk rapide et sale que je viens de créer :

adb shell dumpsys power | awk -F"[ =]" '/mWakefulness=/ { mw=$NF; }
/mHoldingWakeLockSuspendBlocker=/ {mh=$NF;}
END {
  print mw
  print mh
}'

0voto

Thyamine Points 1025

A répondu en Existe-t-il un moyen de vérifier si l'écran d'un appareil Android est verrouillé via adb ? - Stack Overflow et copier ici :

  • Mon téléphone : XiaoMi 9
    • Android : 10

utiliser adb pour vérifier l'état de verrouillage de l'écran

méthode 1 : utilisation (universelle) mDreamingLockscreen

  • Commandement : adb shell dumpsys window | grep mDreamingLockscreen
  • Sortie :
    • mShowingDream=false mDreamingLockscreen=true mDreamingSleepToken=null -> Écran Verrouillé
      • peu importe l'écran est ON o OFF
    • mShowingDream=false mDreamingLockscreen=false mDreamingSleepToken=null -> Scrren Déverrouillé

méthode 2 : utilisation nfc (si Android a un module NFC)

  • Commandement : adb shell dumpsys nfc | grep 'mScreenState='
  • Sortie :
    • mScreenState=OFF_LOCKED -> Écran éteint et verrouillé
    • mScreenState=ON_LOCKED -> Écran activé et verrouillé
    • mScreenState=ON_UNLOCKED -> Écran activé et déverrouillé

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X