2011-06-29 23 views
5

Estoy usando el siguiente código en la actividad de mi aplicación para evitar que cierre mi aplicación.Impedir que el botón Atrás cierre mi aplicación

/* Prevent app from being killed on back */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 

     // Back? 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      // Back 
      moveTaskToBack(true); 
     } 

     // Return 
     return super.onKeyDown(keyCode, event); 

    } 

No funciona. La aplicación está configurada para ser compatible con Android 1.6 (nivel 4 de API). Al hacer clic en el ícono de mi aplicación, reinicio mi aplicación en una actividad de Splash (que es la Principal). ¿Cómo puedo evitar que mi aplicación se cierre de nuevo?

Respuesta

8

¿Ha intentado poner la llamada super en un bloque else para que solo se llame si la clave no es KEYCODE_BACK?

/* Prevent app from being killed on back */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 

     // Back? 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      // Back 
      moveTaskToBack(true); 
      return true; 
     } 
     else { 
      // Return 
      return super.onKeyDown(keyCode, event); 
     } 
    } 

En honor a la verdad, sin embargo, no se puede confiar en esto porque una vez que su aplicación se coloca en el fondo, en cualquier momento podría ser reciclado para el sistema para recuperar la memoria.

+0

Esto funcionó a la perfección. Sé que hay reservas sobre cómo usarlo, pero lo encuentro muy adecuado. –

1

Incluso si pudiera hacer eso, no debería hacerlo. Hacer que los usuarios mantengan su aplicación en la memoria todo el tiempo no es una buena idea y solo los molestará.

10

Una solución más sucinta: -

@Override 
public void onBackPressed() { 
    // do nothing. We want to force user to stay in this activity and not drop out. 
} 
0

Si necesidad de navegar de vuelta, así como la prevención de cierre, a continuación, en WebView Android usan este:

@Override 
public void onBackPressed() { 
    if (mWebView.canGoBack()) { 
     mWebView.goBack(); 
     return; 
    } 

    // Otherwise defer to system default behavior. 
    super.onBackPressed(); 
} 
Cuestiones relacionadas