2011-06-16 28 views
34

No deseo que el usuario pueda volver a la pantalla secundaria de mi aplicación. Una solución parece ser comprobar si la actividad que está por debajo de la actual es una instancia de la pantalla de presentación, y en ese caso salir de la aplicación, como se muestra en el siguiente código. Sin embargo, no sé cómo verificar cuál es la actividad previa en la pila. ¿Alguien puede ayudar? ¿Hay alguna otra forma de desactivar 'volver atrás' a una actividad determinada?¿Cómo puedo desactivar 'volver atrás' a alguna actividad?

@Override 
public void onBackPressed() { 
    if(<previous activity in stack is an instance of splashscreen>){ 
     Intent exit_intent=new Intent(CurrentActivity.this, SplashScreen.class); 
     exit_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     exit_intent.putExtra("EXIT", true); 
     context.startActivity(exit_intent); 
    } 
} 

Respuesta

110

llamada finish() en su actividad de pantalla de bienvenida justo después de comenzar la siguiente actividad.

Otro enfoque consiste en añadir este atributo a su actividad en AndroidManifest.xml: android:noHistory="true"

Ejemplo:

<activity android:name=".SplashActivity" android:noHistory="true"/> 

Este atributo indica a Android para eliminar SplashActivity de la pila de la historia, una vez su navegado lejos de.

+0

gracias "android: noHistory =" mucha verdad "" - esto fue muy útil! – Simcha

+0

¿Por qué finish() funciona? – Joop

+0

final() (cuando se agrega en la actividad original justo después de comenzar la siguiente actividad) funciona porque Android no "retrocede" a una actividad que está terminada (destruida), solo a aquellas que están pausadas o detenidas (vivas). –

19

Sólo tiene que llamar context.finish() después context.startActivity()

+5

Una buena alternativa, conocida como [reenvío] (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.html) –

+0

Might no funciona para cuando juegas un archivo multimedia al comenzar la siguiente actividad. Como podría ser acortado. – Mike6679

+0

no funciona para mí sdk 22 .... – Micro

9

intente lo siguiente cuando se llama a la siguiente Activity de su Splashscreen:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
2
<activity android:name=".SplashActivity" android:noHistory="true"/> 

Desde el documentation:

Sea o no la actividad debe eliminarse de la pila de actividades y terminado (se llama a su método finish()) cuando el usuario navega fuera de él y ya no es visible en la pantalla - "verdadero" si debe ser finalizado, y "falso" si no es así. El valor predeterminado es "falso".

Un valor de "verdadero" significa que la actividad no dejará un rastro histórico . No permanecerá en la pila de actividades para la tarea, por lo que el usuario no podrá volver a ella. En este caso, onActivityResult() nunca se invoca si inicia otra actividad para un resultado de esta actividad.

Este atributo se introdujo en el nivel de la API 3.

Cuestiones relacionadas