¿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?
- Cómo compilar APK desde la línea de comandos?
- Pruebas con Robolectric y ANT
- ¿Dónde puedo obtener una lista de todos los comandos Robotium?
- Cómo cambiar la orientación del dispositivo Android con ADB
- Cómo descargar las acciones del componente de la interfaz de usuario de Android y sus datos para ayudar a resolver los errores difíciles de reproducir
- "Si cada teléfono responde a OK Google ",
- Cómo probar el gesto de desplazamiento del buscapersonas en Android con Espresso 2.2
- Cómo crear emulador de Android en línea de comandos con opciones?
- Automatice la implementación en la Consola para programadores de Android
- Error en la automatización de las pruebas de interfaz de usuario de Android en Jenkins-Server debido a complejas dependencias del proyecto lib de los proyectos principales.
- Appium: Cómo iniciar la aplicación de Android para el perfil de trabajo
- Android: varias versiones personalizadas de la misma aplicación
- Android, Error = No se puede encontrar la información de instrumentación para: ComponentInfo {}
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.
- Cómo crear Google + tarjetas de interfaz de usuario en una vista de lista?
- Android equivalente de trabajo alrededor de View.getX () antes de la API 11?