Domanda

Se l'utente preme ripetutamente il pulsante indietro, ho bisogno di un modo per rilevare quando sono sulla molto ultima attività del mio compito / app e mostrano "Vuoi uscire?" dialogo befor tornano a schermo base o da qualunque applicazione precedente che avevano in esecuzione.

La sua facile abbastanza per gancio onkeypressed(), ma come faccio a capire che questo è un "ultimo" l'attività nel compito?

È stato utile?

Soluzione

Penso che si possa utilizzare smth come questo nella tua attività per verificare se è l'ultima:

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;
}

Ciò richiederà anche di aggiungere un permesso per il vostro AndroidManifest.xml:

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

Così nella vostra ACTIVITA si può semplicemente utilizzare il seguente:

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

Poi nel youd dialogo gestire il pulsante click to call Activity.finish ().

Altri suggerimenti

Si prega di rivedere il Android Application Fundamentals , questo viola il comportamento promosso di un'applicazione Android:

Quando l'utente preme il tasto BACK, lo schermo non visualizza l'attività che l'utente appena lasciato (l'attività principale del compito precedente). Piuttosto, l'attività in cima alla pila viene rimosso e viene visualizzata l'attività precedente nella stessa operazione.

AFAIK, non c'è.

Ci sono un paio di bandiere è possibile utilizzare per influenzare lo stack storia, ma tutti all'interno dell'applicazione. Prova questo bandiere con il vostro intento:

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

FLAG_ACTIVITY_NO_HISTORY

FLAG_ACTIVITY_REORDER_TO_FRONT

FLAG_ACTIVITY_SINGLE_TOP

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top