Esto no es nada del otro mundo, por lo general no hace falta porque cuando un usuario pulsa el boton atras, lo que quieres es precisamente volver atras, y rápido. Pero a veces hace falta por ejemplo cuando estamos una Activity seria y no queremos que por error el usuario vuelva atrás por pulsar el boton sin querer o lo que sea.
La idea es sobreescribir el método onKeyDown() de la Activity, y detectar la pulsacion del boton concretamente KeyEvent.KEYCODE_BACK
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Salir")
.setMessage("Estás seguro?")
.setNegativeButton(android.R.string.cancel, null)//sin listener
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {//un listener que al pulsar, cierre la aplicacion
@Override
public void onClick(DialogInterface dialog, int which){
//Salir
TheActivity.this.finish();
}
})
.show();
// Si el listener devuelve true, significa que el evento esta procesado, y nadie debe hacer nada mas
return true;
}
//para las demas cosas, se reenvia el evento al listener habitual
return super.onKeyDown(keyCode, event);
}
si programamos para android 2.0, podemos sobreescribir el listener onBackPressed() que ya se llama directamente al pulsar ese boton.