2012-09-04 16 views
5

Quando un utente tocca "Disconnetti" all'interno della mia applicazione, vorrei che venissero portati all'attività "Login" e uccidere tutte le altre attività in esecuzione o in pausa all'interno della mia applicazione.Android - Elimina tutte le attività al logout

La mia applicazione utilizza le Preferenze condivise per ignorare l'attività "Accesso" all'avvio se l'utente ha effettuato l'accesso in precedenza. Pertanto, FLAG_ACTIVITY_CLEAR_TOP non funzionerà in questo caso, poiché l'attività di accesso si troverà all'inizio dello stack di attività quando l'utente viene portato lì.

+1

Questa è la tua risposta .. http://stackoverflow.com/questions/5453206/how-to-close-all-the-activities-of-my-application – Abhishek

+0

Deve esserci perso questa risposta, molto utile. Grazie –

risposta

12

È possibile utilizzare un BroadcastReceiver per ascoltare un "segnale di uccidere" nelle altre attività

http://developer.android.com/reference/android/content/BroadcastReceiver.html

nelle vostre attività si registra un BroadcastReceiver

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("CLOSE_ALL"); 
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    // close activity 
    } 
}; 
registerReceiver(broadcastReceiver, intentFilter); 

Poi basta inviare una trasmissione da qualsiasi punto della tua app

Intent intent = new Intent("CLOSE_ALL"); 
this.sendBroadcast(intent); 
+0

questo ha funzionato come un fascino, grazie per l'aiuto –

+0

Questa è una soluzione molto accurata e veloce. Voto in eccesso – sandalone

+0

Così dolce modo di utilizzare l'API Android :) –

2

Invece di FLAG_ACTIVITY_CLEAR_TOP uso FLAG_ACTIVITY_CLEAR_TASK (API 11+ però):

Se impostato in un intento passato a Context.startActivity(), questo flag causerà qualsiasi compito esistente che sarebbe associata con l'attività da eliminato prima l'attività è iniziata. Cioè, l'attività diventa la nuova radice di un'attività altrimenti vuota e tutte le vecchie attività sono finite. Questo può essere utilizzato solo in combinazione con FLAG_ACTIVITY_NEW_TASK.

+0

Questo è stato perfetto. Grazie. :) – Enrichman

8

Per API 11+ è possibile utilizzare Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK come questo:

Intent intent = new Intent(this, MyActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); 
this.startActivity(intent); 

sarà tutto chiaro tutta l'attività precedente (s) e iniziare nuove attività.

+0

hey rockstar, metti giù la chitarra :) – Karoly

+0

Questa dovrebbe essere la risposta corretta. Utilizzare la trasmissione per questo è un tale hack! –

Problemi correlati