¿Cómo puedo desbloquear la pantalla mediante programación en Android?

Estoy trabajando en un marco de prueba automatizado remoto para Android basado en JUnit (pruebas ejecutadas fuera de android, interactuando con código dentro de él). Todo funciona bastante bien, pero un problema que tengo es que cuando inicio automáticamente un emulador nuevo, la pantalla comienza bloqueada. Esto parece afectar a mis pruebas de ser capaz de ejecutar, además, quiero ver las pruebas de ejecución (botones pulsados, texto escrito, etc). Si inicio manualmente un emulador y desbloqueo su pantalla, todo funciona bien.

¿Hay una manera de desbloquear la pantalla mediante programación en Android? Una API de Java, una línea de comandos o un comando de shell, etc. estarían bien. A menos que, tal vez hay una manera de iniciar un emulador desbloqueado?

Puede interactuar con el emulador a través de su interfaz de consola .

Si alguna vez se preguntó por qué su emulador comenzó con un número como 5554 – eso es porque ese es el puerto que escucha el emulador.

Puede encontrar el puerto para ejecutar emuladores con el comando adb devices . Tendrá una salida como esta:

 C:\>adb devices List of devices attached emulator-5554 device 

Así que puedes conectarte al emulador usando un comando como:

 telnet localhost 5554 

Si se conecta correctamente obtendrá un mensaje de confirmación OK y podrá comenzar a escribir comandos.

Hay varios comandos pero el que nos interesa es un event para simular eventos de hardware. Podemos desbloquear la pantalla pulsando Menú que emularemos con el siguiente comando:

 event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0 

EV_KEY:KEY_MENU:1 es evento de EV_KEY:KEY_MENU:0 y EV_KEY:KEY_MENU:0 es el evento de key-up correspondiente. Asegúrese de hacer ambas cosas o la tecla Menú quedará atascada.

Me doy cuenta de que este guión no será fácil, pero es todo lo que puedo pensar para resolver tu problema.

Editar: No creo que el event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0 es emulando el menú, pero si ejecuto el comando justo después de haber iniciado el emulador que lo desbloquea. No sé por qué pero supongo que esto es un comienzo.

El one-liner que funciona para mí en Android SDK r18 y r20 hablando con un emulador 4.0.3 (API 15):

 adb shell input keyevent 82 

Creo que el siguiente enlace tiene la respuesta que buscas.

http://developer.android.com/guide/topics/testing/activity_testing.html#UnlockDevice

Desbloqueo del emulador o dispositivo

Es posible que las pruebas de interfaz de usuario no funcionen si la pantalla principal del emulador o del dispositivo está desactivada con el patrón de bloqueo de teclado. Esto se debe a que la aplicación bajo prueba no puede recibir eventos clave enviados por sendKeys (). La mejor manera de evitar esto es iniciar primero el emulador o el dispositivo y deshabilitar el bloqueo de teclado para la pantalla de inicio.

También puede desactivar explícitamente el bloqueo de teclado. Para ello, debe agregar un permiso en el archivo de manifiesto (AndroidManifest.xml) y, a continuación, deshabilitar el bloqueo de teclado en la aplicación bajo prueba. Tenga en cuenta, sin embargo, que usted tiene que quitar esto antes de publicar su aplicación, o tiene que desactivarla con código en la aplicación publicada.

Para agregar el permiso, agregue el elemento como un elemento secundario del elemento. Para deshabilitar KeyGuard, añada el siguiente código al método onCreate () de las actividades que desea probar:

MKeyGuardManager = (KeyguardManager) getSystemService (KEYGUARD_SERVICE); MLock = mKeyGuardManager.newKeyguardLock ("activity_classname"); MLock.disableKeyguard (), donde activity_classname es el nombre de clase de la actividad.

Pruebe este script:

 echo "event send EV_KEY:KEY_SOFT1:1" | nc -q1 localhost 5554 sleep 0.1 echo "event send EV_KEY:KEY_SOFT1:0" | nc -q1 localhost 5554 sleep 0.1 echo "event send EV_KEY:KEY_SOFT1:1" | nc -q1 localhost 5554 sleep 0.1 echo "event send EV_KEY:KEY_SOFT1:0" | nc -q1 localhost 5554 sleep 0.1 

Me las arreglé para hacerlo usando el shell:

 adb shell #input keyevent 82 

La forma más sencilla de desbloquear la pantalla (suponiendo que no hay contraseña) es pasar un evento KEYCODE_MENU; Sin embargo, si la pantalla ya está desbloqueada, esto abrirá un menú, que probablemente no es la funcionalidad que estás buscando.

Si desea una forma sencilla de garantizar que la pantalla se desbloquee sin abrir un menú por accidente, debe pasar primero un evento KEYCODE_POWER. Esto garantizará que el dispositivo está en un estado bloqueado, por lo que el evento de menú sólo desbloqueará la pantalla.

 adb shell input keyevent KEYCODE_POWER; adb shell input keyevent KEYCODE_MENU 

(Nota: El 82 que aparece en otras respuestas es la constante KEYCODE_MENU.)

Puede bloquear su dispositivo emulador ejecutando este comando desde el símbolo del sistema

 adb shell input keyevent 26 

Puede desbloquear su dispositivo emulador ejecutando este comando desde el símbolo del sistema

 adb shell input keyevent 82 

Después de ejecutar el comando de desbloqueo, puede que tenga que esperar unos minutos. El comando de desbloqueo anterior funcionará cuando no tenga ningún bloqueo de seguridad.

  • Seleccione el elemento de AutoCompleteTextView en uiautomator
  • ¿Cómo utilizar ADB para enviar eventos táctiles al dispositivo utilizando comando sendevent?
  • Detección de la orientación del dispositivo
  • ¿Cómo probar la conexión wifi vía adb?
  • Automatizar el proceso de publicación de la aplicación para Android
  • ¿Cómo puedo obtener identificadores, nombres o rutas x para elementos ui utilizados en una aplicación para móviles (Android / iOS) para pruebas de automatización móvil?
  • Automatización de Android APK con Espresso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.