Android – onBackPressed () no funciona
Tengo un edificio de aplicaciones contra Android 2.1 y quiero anular el botón de retroceso.
He seguido el ejemplo aquí:
- Android Back Button para una actividad específica
- ¿Comprobar si la tecla de la parte posterior fue presionada en androide?
- Haciendo clic dos veces en el botón Atrás para salir de una actividad
- OnKeyDown () o onBackPressed ()
- Ayuda para evitar que el botón Volver cierre la subactividad
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 un héroe con 2.1 update-1 y un Nexus One con 2.2.
¿Hay algo que me falta en el ejemplo? ¿O alguien puede indicar por qué no funciona?
Ni siquiera logro pulsar el botón en el logcat.
- Manejo del hardware de Android Botón Atrás
- Anular el botón de retroceso en android
- Cómo desactivar el botón de nuevo en android
- OnPause no se llama cuando se pulsa el botón?
- Android cómo poner un cuadro de diálogo después de presionar un botón de nuevo
- cómo mostrar admob intersticial en la salida de la aplicación
¿Está usando onKeyUp () ?
Use sólo onKeyDown () en Android 1.x o enBackPressed () en Android 2.x
Algunas búsquedas rápidas sugieren que debe colocar la interceptación de Back durante onKeyUp (): http://developer.android.com/sdk/android-2.0.html . Vale la pena intentarlo. El código siguiente es directamente del 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); }
Debe llamar a los constructores de padres.
En la llamada al método onKeyDown()
super.onKeyDown();
Y en onBackPressed()
super.onBackPressed();