4 votos

Comando(s) Adb para obtener el estado de la pantalla y el estado de bloqueo

Antecedentes:

Estoy utilizando pruebas automatizadas en muchas variantes diferentes de dispositivos ( Tabletas y smartphones Samsung como Galaxy A5, S8, S7, etc. ) donde los dispositivos tienen diferentes versiones de Android ( 6.0, 6.0.1, 7.0 y 7.1.1 ), todo ello en diferentes combinaciones.

Algunas de mis pruebas requieren bloquear la pantalla (apagarla) y luego encenderla e introducir el PIN. No he podido encontrar un comando adb (universal) para obtener el estado de los teléfonos. Idealmente, me gustaría un para decirme en cuál de los siguientes estados se encuentra el teléfono:

  1. Pantalla apagada (se supone que también bloqueada)
  2. Pantalla encendida, bloqueada
  3. Pantalla encendida, desbloqueada

Mi mejor solución hasta ahora es utilizar los siguientes 2 comandos (terminal bash):

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

#2:
adb shell service call trust 7

El comando #1 me dice si la pantalla está encendida, apagada o "adormecida".

El comando #2 me dice si el teléfono está bloqueado o desbloqueado.

Preguntas:

¿Hay algún comando adb que pueda darme la información que necesito? ¿Es este comando compatible con las versiones de Android mencionadas anteriormente?

En la versión 6.* de Android el comando #2 siempre indica que el teléfono está bloqueado. Cuál es la alternativa "compatible con Android 6.*" del comando #2? ----> Por pura casualidad encontré esa "llamada de servicio de confianza". 6 "funciona como se esperaba en Android 6. dispositivos!*

Nota:

El recurso que he encontrado más parecido a mi problema es el siguiente Pregunta/respuesta del SO . Sin embargo, no todos los dispositivos tienen/utilizan NFC, por lo que el siguiente comando (aunque es compatible con la mayoría de los dispositivos/versiones) no es aceptable en mis pruebas:

adb shell dumpsys nfc | grep 'mScreenState='

Dado que el tiempo es un problema, la solución propuesta (la mejor respuesta en el enlace) tampoco es aceptable.

3voto

Scott Puntos 3238

Soy un fanboy de Windows, así que la solución contiene find en lugar de utilizar grep , sólo hay que sustituir find por grep.

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

Pantalla OFF y Bloqueado \= mWakefulness= Dormido & mHoldingWakeLockSuspendBlocker= falso

Pantalla EN y Bloqueado \= mWakefulness= Despierta & mHoldingWakeLockSuspendBlocker= falso

Pantalla EN y Desbloqueado \= mWakefulness= Despierta & mHoldingWakeLockSuspendBlocker= verdadero

P.D: Lo he probado en Android 7.0 No sé si funcionará con otras versiones.

1voto

towo Puntos 111

Como me he encontrado con esto recientemente y ya que usar la pantalla de bloqueo de Daydream no es un requisito en Android, aquí hay algunas variables más nuevas que son (probablemente) universales.

Ellos debe estará disponible a partir de Android M (6.0 / API 23) ya que vienen con el modo Doze; he confirmado ellos con Android 10 en un Samsung Galaxy Tab S4 y con Android 12 en 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

Por supuesto, las joyas del premio son mScreenOn y mScreenLocked , que son booleanos que hacen exactamente lo que tú les pediste.

0voto

Curtis Puntos 21

Podrías usar awk para escupir la respuesta que quieres. Aquí hay un script awk rápido y sucio que acabo de preparar:

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

0voto

Thyamine Puntos 1025

Ha respondido en ¿Hay alguna forma de comprobar si la pantalla del dispositivo Android está bloqueada a través de adb? - Stack Overflow y copiarlo aquí:

  • Mi teléfono: XiaoMi 9
    • Android: 10

utilizar adb para comprobar el estado de la pantalla bloqueada

método 1: uso (universal) mDreamingLockscreen

  • Comando: adb shell dumpsys window | grep mDreamingLockscreen
  • La salida:
    • mShowingDream=false mDreamingLockscreen=true mDreamingSleepToken=null -> Pantalla Bloqueado
      • no importa La pantalla es ON o OFF
    • mShowingDream=false mDreamingLockscreen=false mDreamingSleepToken=null -> Scrren Desbloqueado

método 2: uso nfc (si Android tiene módulo NFC)

  • Comando: adb shell dumpsys nfc | grep 'mScreenState='
  • La salida:
    • mScreenState=OFF_LOCKED -> Pantalla apagada y bloqueada
    • mScreenState=ON_LOCKED -> Pantalla encendida y bloqueada
    • mScreenState=ON_UNLOCKED -> Pantalla Encendida y Desbloqueada

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X