Existe um ouvinte padrão de volta padrão (no dispositivo) no Android?
-
25-09-2019 - |
Pergunta
Estou tendo duas atividades A e B. Quando clico no botão em A que mostrará B. Quando clico no botão em B, ele é retomado para A. Eu defini o método de substituição de transição de substituição após o método FINAL (). Funciona corretamente. Mas, caso a atividade atual seja B. Naquela época, clique no botão de volta padrão no dispositivo. Ele mostra a transição direita para a esquerda para mostrar a atividade A.
Como posso ouvir essa chave de volta padrão no dispositivo?
EDITAR:
Log.v(TAG, "back pressed");
finish();
overridePendingTransition(R.anim.slide_top_to_bottom, R.anim.hold);
Solução
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
return true;
}
return super.onKeyDown(keyCode, event);
}
O link a seguir é uma explicação detalhada sobre como lidar com os eventos principais, escritos pelos próprios desenvolvedores do Android:
Outras dicas
Para o Android 2.0 e posterior, existe um método específico na classe de atividade:
@Override
public void onBackPressed() {
super.onBackPressed();
// Do extra stuff here
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
//Do stuff
}
return super.onKeyDown(keyCode, event);
}
Mais informações sobre as principais coisas que podem ser encontradas aqui: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html
Eu uso esse código em uma atividade com um mídia. Eu precisava interromper a reprodução quando o usuário pressionou o botão Voltar, mas ainda posso voltar à atividade anterior.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
try{
mp.stop(); //this line stops the player
return super.onKeyDown(keyCode, event);//this line does the rest
}
catch(IllegalStateException e){
e.printStackTrace();
}
return true;
}
return super.onKeyDown(keyCode, event); //handles other keys
}