Android – onBackPressed () no funciona

Tengo una aplicación basada en Android 2.1 y quiero anular el botón Atrás.

He seguido el ejemplo aquí:

http://android-developers.blogspot.com/2009_12_01_archive.html

Y mi código es el siguiente:


@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5 && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { Log.d("CDA", "onKeyDown Called"); onBackPressed(); } return true; } @Override public void onBackPressed() { Log.d("CDA", "onBackPressed Called"); Intent setIntent = new Intent(Intent.ACTION_MAIN); setIntent.addCategory(Intent.CATEGORY_HOME); setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(setIntent); return; } 

Funciona en dispositivos pre 2.x pero no funciona en Hero con actualización 2.1 y Nexus One con 2.2.

¿Hay algo que me falta en el ejemplo? ¿O alguien puede señalar por qué no está funcionando?

Ni siquiera tengo el botón presionado en el logcat.

¿Estás usando onKeyUp () ?

Use solo onKeyDown () en Android 1.xo onBackPressed () en Android 2.x.

Algunas búsquedas rápidas sugieren que debe colocar la intercepción de retorno durante onKeyUp (): http://developer.android.com/sdk/android-2.0.html . Vale la pena intentarlo. El siguiente código es directamente desde el sitio:

 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { event.startTracking(); return true; } return super.onKeyDown(keyCode, event); } public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) { // *** DO ACTION HERE *** return true; } return super.onKeyUp(keyCode, event); } 

Deberías llamar a los constructores padres.

En la llamada al método onKeyDown()

 super.onKeyDown(); 

y en onBackPressed()

 super.onBackPressed();