2010-10-28 10 views
5

Si el usuario presiona repetidamente el botón Atrás, necesito una forma de detectar cuándo están en la última actividad de mi tarea/aplicación y mostrar "¿Desea salir? " antes de que regresen a la pantalla de inicio o a la aplicación anterior que tenían en ejecución.muestra el diálogo sí/no antes de salir de la aplicación mediante el botón Atrás

Es bastante fácil de enganchar onkeypressed(), pero ¿cómo me doy cuenta de que esta es una "última" actividad en la tarea?

+3

¿Estás seguro de que quieres hacer esto? Suena bastante molesto El usuario aprende rápidamente lo que significa volver atrás, y entiende que podría estar saliendo de la aplicación. –

+3

¿Qué pasa con el voto negativo? Se dice claramente que hay que rechazar las preguntas que son "poco claras o no útiles", esto no es ninguna de las dos cosas. Puede que no sea la forma recomendada de hacer las cosas, pero no creo que esta pregunta deba rechazarse por eso. Votándolo nuevamente. – ShadowGod

Respuesta

6

Creo que se puede utilizar Smth como este en su actividad para comprobar si se trata de la última :

private boolean isLastActivity() { 
    final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    final List<RunningTaskInfo> tasksInfo = am.getRunningTasks(1024); 

    final String ourAppPackageName = getPackageName(); 
    RunningTaskInfo taskInfo; 
    final int size = tasksInfo.size(); 
    for (int i = 0; i < size; i++) { 
     taskInfo = tasksInfo.get(i); 
     if (ourAppPackageName.equals(taskInfo.baseActivity.getPackageName())) { 
      return taskInfo.numActivities == 1; 
     } 
    } 

    return false; 
} 

Esto también requerirá añadir un permiso para su AndroidManifest.xml:

<uses-permission android:name="android.permission.GET_TASKS" /> 

Así, en su activty sólo se puede utilizar lo siguiente:

public void onBackPressed() { 
    if (isLastActivity()) { 
     showDialog(DIALOG_EXIT_CONFIRMATION_ID); 
    } else { 
     super.onBackPressed(); // this will actually finish the Activity 
    } 
} 

Luego, en el youd diálogo manejar el clic de botón de llama Activity.finish().

+0

brillante! gracias. – Saideira

2

Por favor revise la Android Application Fundamentals, esto viola el comportamiento promovido de una aplicación Android:

Cuando el usuario pulsa la tecla BACK, la pantalla no muestra la actividad del usuario justo a la izquierda (la actividad de la raíz de la tarea anterior) Por el contrario, la actividad en la parte superior de la pila se elimina y se muestra la actividad anterior en la misma tarea.
+0

Ojalá viviéramos en un mundo perfecto, pero por desgracia. El cliente quiere el diálogo. Entonces, ¿hay alguna manera de echar un vistazo a la pila de actividades/tareas globales? – Saideira

+0

Sí, estoy de acuerdo en que los clientes quieren cosas que solían. Con algunos tipos de clientes, simplemente no podemos decir 'No' y solo tenemos que hacer lo que ellos quieren. Verifique mi respuesta para saber cómo hacer lo que necesita. –

Cuestiones relacionadas