Isso tem me deixado maluco por um tempo.
Existe alguma maneira de detectar com segurança se o botão home foi pressionado em um aplicativo Android?
Caso contrário, existe uma maneira robusta de dizer o que fez com que uma atividade entrasse na pausa? Ou seja, podemos detectar se foi causado pelo início de uma nova atividade ou pressionando voltar / home.
Uma sugestão que vi é substituir onPause () e chamar isFinishing (), mas isso retornará falso ao pressionar o botão home, assim como faria se uma nova atividade estivesse sendo iniciada, portanto, não consegue distinguir entre os dois.
Qualquer ajuda muito apreciada.
** Atualização **: Obrigado @ android -gry por este link: https://nishandroid.blogspot.com/
Substituindo o seguinte método:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
Em seguida, o seguinte evento SERÁ disparado ao pressionar o botão home:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
Não tenho certeza se há efeitos colaterais com esta linha:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
Portanto, ao contrário da crença popular, parece que você pode ouvir a tecla home. É preocupante que você retorne false e a chave home não faça nada.
Atualização : Como esperado, existem alguns efeitos colaterais com isso - parece que os vídeos incorporados e mapas do Google não são visíveis com este modo habilitado.
Atualização : supostamente, este hack não funciona mais a partir do Android 4.0
Activity.onUserLeaveHint()
.