Fondo:
Estoy usando pruebas automatizadas en muchas variantes diferentes de dispositivos ( tabletas Samsung y teléfonos inteligentes 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 en combinaciones variadas.
Algunas de mis pruebas requieren bloquear la pantalla (apagarla) y luego encenderla e ingresar el PIN. No he podido encontrar un comando adb (universal) para obtener el estado de los teléfonos. Idealmente, me gustaría que un comando me dijera en cuál de los siguientes estados se encuentra el teléfono:
Mi mejor solución hasta ahora es usar 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 "dormida".
El comando #2 me dice si el teléfono está bloqueado o desbloqueado.
Preguntas:
¿Hay un solo comando adb que pueda darme la información que necesito? ¿Este comando es 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 "Android 6.* compatible" del comando #2? ----> ¡ Por pura casualidad, descubrí que "service call trust 6 " funciona como se esperaba en los dispositivos Android 6 .!*
Nota:
El recurso que encontré que más se parece a mi problema es la siguiente pregunta/respuesta de SO . Sin embargo, no todos los dispositivos tienen/utilizan NFC, por lo que el siguiente comando (aunque 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.
Soy un fanático de Windows, por lo que la solución contiene find
en lugar de usar grep
, simplemente reemplace find con grep.
adb shell dumpsys power | find "mWakefulness="
adb shell dumpsys power | find "mHoldingWakeLockSuspendBlocker="
Pantalla APAGADA y bloqueada = mWakefulness= Dormido & mHoldingWakeLockSuspendBlocker= false
Pantalla ENCENDIDA y bloqueada = mWakefulness= Awake & mHoldingWakeLockSuspendBlocker= false
Pantalla ENCENDIDA y desbloqueada = mWakefulness = Despierto & mHoldingWakeLockSuspendBlocker = verdadero
PD: Lo he probado en Android 7.0 , no sé si funcionará con otras versiones.
Como me encontré con esto recientemente y dado que el uso de la pantalla de bloqueo de Daydream no es un requisito en Android, aquí hay algunas variables más nuevas que (probablemente) son universales.
Deberían estar disponibles a partir de Android M (6.0 / API 23) ya que vienen con el modo Doze; Los he confirmado con Android 10 en un Samsung Galaxy Tab S4 y 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 premiadas aquí son mScreenOn
y mScreenLocked
, que son valores booleanos que hacen exactamente lo que buscaste.
Podrías usar awk para escupir la respuesta que quieres. Aquí hay un script awk rápido y sucio que preparé hace un momento:
adb shell dumpsys power | awk -F"[ =]" '/mWakefulness=/ { mw=$NF; }
/mHoldingWakeLockSuspendBlocker=/ {mh=$NF;}
END {
print mw
print mh
}'
ha respondido en ¿Hay alguna manera de verificar si la pantalla del dispositivo Android está bloqueada a través de adb? - Stack Overflow y copia aquí:
XiaoMi 9
10
mDreamingLockscreen
adb shell dumpsys window | grep mDreamingLockscreen
mShowingDream=false mDreamingLockscreen=true mDreamingSleepToken=null
-> Pantalla bloqueada
ON
oOFF
mShowingDream=false mDreamingLockscreen=false mDreamingSleepToken=null
-> Pantalla desbloqueadanfc
(si Android tiene un módulo NFC)adb shell dumpsys nfc | grep 'mScreenState='
mScreenState=OFF_LOCKED
-> Pantalla APAGADA y bloqueadamScreenState=ON_LOCKED
-> Pantalla encendida y bloqueadamScreenState=ON_UNLOCKED
-> Pantalla ENCENDIDA y desbloqueada
ledwinder96
dos