Android: escucha la tecla de encendido
Estoy tratando de escuchar cuando se presiona el botón de encendido. En última instancia, me gustaría tener algún código ejecutado cuando el botón de encendido se presiona dos veces, para comprobar si la pantalla está bloqueada o desbloqueada. Actualmente tengo esto:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);//prevent phone from being locked } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_POWER: { Toast.makeText(getBaseContext(), "Power button pressed", Toast.LENGTH_LONG).show(); return true; } case KeyEvent.KEYCODE_MENU: Toast.makeText(getBaseContext(), "Menu Button Pressed", Toast.LENGTH_LONG).show(); return true; } return super.onKeyDown(keyCode, event); }
El código funciona bien para brindar por el keyevent de menú, pero no hace nada para el evento de tecla de encendido. ¿Algunas ideas?
- Enviar una consulta cuando haga clic en el botón de búsqueda en el teclado
- No se puede capturar el evento del botón Volver de Android
- ¿Es posible crear un servicio Android que escuche las pulsaciones de teclas de hardware?
- Teclas especiales KeyEvent (como silenciar)
- KeyCode en android es siempre 229
- ¿Cómo detectar pulsaciones de teclas de caracteres?
- Para Emacs, viaje largo para usar la tecla CTRL en Android
- Iniciar chat de vídeo sin interacción del usuario - Android
- Android: ¿Hay una manera de simular D-Pad Events (API 10)?
- DispatchKeyEvent desde Service
- Android: captura los eventos clave "Hecho" y "Introducir" en el teclado virtual
- EditText no recibe eventos clave TAB - stock soft vk
- Android onkey - dispatchKeyEvent sin disparar
Aunque no pude capturar la llave del hardware terminé siendo capaz de adivinar que la llave de la energía fue presionada usando un receptor de la difusión que escucha para saber si la pantalla está apagada o encendido. Solía:
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { //do something } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { //do something else }
Yo era capaz de estar más seguro de que el botón de encendido estaba siendo presionado por tener una cuenta que el tiempo de espera después de un par de segundos. De esta manera tengo el usuario presione el botón de encendido tres veces para asegurar que el comportamiento adecuado.
AFAIK, no es posible para la tecla de Power
.
Es posible que desee consultar esta respuesta: http://groups.google.com/group/android-developers/browse_thread/thread/a4db4def1bdaa8d9
He utilizado las anotaciones de Android "@Receiver" anotación.
Añada esto a su "@EActivity" anotado Actividad:
@Receiver(actions = Intent.ACTION_SCREEN_OFF) protected void onPowerButtonPressed() { // add your code }