Esto me ha estado volviendo loco por un tiempo.
¿Hay alguna forma de detectar de manera confiable si se presionó el botón de inicio en una aplicación de Android?
De no ser así, ¿existe una forma sólida de saber qué provocó que una actividad entrara en pausa? es decir, ¿podemos detectar si fue causado por el inicio de una nueva actividad o presionando back / home?
Una sugerencia que he visto es anular onPause () y llamar a isFinishing (), pero esto devolverá falso al presionar el botón de inicio, tal como lo haría si se inicia una nueva actividad, por lo que esto no distingue entre los dos.
Cualquier ayuda muy apreciada.
** Actualización **: Gracias a @ android-hungry por este enlace: https://nishandroid.blogspot.com/
Anulando el siguiente método:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
Luego, el siguiente evento se activará al presionar el botón de inicio:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
No estoy seguro de si hay efectos secundarios con esta línea:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
Por lo que parecería que, contrariamente a la creencia popular, de hecho puede escuchar la tecla de inicio. Es preocupante que pueda devolver false y que la tecla de inicio no haga nada.
Actualización : como se esperaba, hay algunos efectos secundarios con esto: parece que los videos incrustados y los mapas de Google no son visibles con este modo habilitado.
Actualización : supuestamente este truco ya no funciona a partir de Android 4.0 en adelante
Activity.onUserLeaveHint()
.