2012-07-20 9 views
8

Ho un'attività che può essere avviata da diverse altre attività, insieme agli intenti del filtro url.Avvia l'attività principale se lo stack di attività è vuoto

In questa attività, utilizzo l'icona Home nella barra delle azioni come pulsante Indietro, riportando l'utente all'attività precedente (e non come azione "casa"). Per ora lo faccio chiamando la funzione finish(). Funziona bene quando si lavora dall'interno dell'applicazione.

Tuttavia, se si avvia l'attività con un intento di filtro URL, voglio che l'icona Home porti l'utente all'attività principale. Ovviamente, la chiamata a finish() chiuderà l'attività.

Quindi la mia domanda è, c'è un modo per verificare se il mio stack di applicazioni è vuoto e quindi avviare l'acivity principale se vero? O sto attaccando nel modo sbagliato?

risposta

12

Se la vostra applicazione viene avviata tramite url filtro intento e crea il proprio compito, quindi è possibile utilizzare

if (isTaskRoot()) { 
    // This activity is at root of task, so launch main activity 
} else { 
    // This activity isn't at root of task, so just finish() 
} 

EDIT: Aggiunto un altro possibile metodo

Se la vostra applicazione è lanciato in un un'attività esistente quando viene avviata tramite il filtro degli intenti URL, quindi puoi eseguire un'operazione simile al seguente:

Quando si avvia l'attività da altre attività nell'applicazione, aggiungere un EXTRA all'intento in questo modo:

Intent intent = new Intent(this, MyActivity.class); 
intent.putExtra("internal", "true"); 
startActivity(intent); 

Quando l'attività viene lanciato può quindi verificare la presenza o l'assenza del EXTRA nell'intento di determinare se è stato lanciato internamente o tramite URL intent-filtro, in questo modo:

Intent intent = getIntent(); 
if (intent.hasExtra("internal")) { 
    // Launched internally 
} else { 
    // Launched via intent-filter 
} 
+0

Sembra una buona soluzione, ma purtroppo non funziona. isTaskRoot() restituisce false in entrambe le situazioni. Suppongo di aver bisogno che funzioni anche quando non si sta avviando un nuovo task (ad esempio l'app è già in esecuzione in background?). Non riesco a concentrarmi sull'attività/sulla gestione delle attività. – SveinT

+1

Ho modificato la mia risposta per aggiungere un altro metodo che è possibile utilizzare poiché la tua attività è ovviamente avviata in un'attività esistente. –

+0

Ovviamente dovrebbe funzionare, ma presumo che esista una soluzione più pulita? L'app di Gmail e altri implementano un comportamento simile. Ad ogni modo, dovrà fare. Grazie! – SveinT

Problemi correlati