2016-07-14 38 views
5

La mia app ha lo scopo di consentire solo agli utenti che hanno effettuato l'accesso di accedere alle attività. Se un utente si disconnette, la preferenza condivisa boolean isLogged è impostata su false e l'utente non deve accedere al resto delle attività ad eccezione di LoginActivity.Come chiudere tutte le attività e uscire da un'app

Tuttavia, sono in grado di accedere a tutte le attività precedentemente aperte premendo il pulsante Indietro.

userei finish(); durante l'apertura di ogni attività, ma poi vorrei utenti di utilizzare ancora il pulsante Indietro mentre si è registrato in.

Ho provato le soluzioni di altre domande simili come

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("EXIT", true); 
startActivity(intent); 

e sulla onCreate() della mia LoginActivity ho aggiunto

if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
    } 

Quando premo l'opzione logout, il p si apre invece una grande attività.

Qualche suggerimento, per favore aiutatemi?

+0

prova questo .. http://stackoverflow.com/a/38268217/6334037 – user392117

risposta

4

Si dovrebbe usare questo flag, che cancellare il vostro compito e crearne uno nuovo

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
+1

Questo ha funzionato per me. – Mwas

+1

Sei il benvenuto bro! –

2

provare ad aggiungere tutte le attività in ordine e quando si desidera rimuovere solo rimuoverlo dalla matrice e terminare l'attività. vedere la mia risposta qui Remove activity from stack

3
if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
android.os.Process.killProcess(android.os.Process.myPid()); 
    } 
3

Prova questo

È necessario aggiungere questi bandiera intenti ..

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.putExtra("EXIT", true); 
startActivity(intent); 
finish(); 
0

ho affrontato ad una situazione simile. Come ho capito, anche se chiamo la funzione finish() all'inizio, viene eseguita l'intera funzione onCreate(). Quindi finirà. Nel mio scenario, nella funzione onCreate(), chiamo un'altra attività. Quindi, anche se l'attività principale termina dopo onCreate(), la seconda attività esiste ancora. Così la mia soluzione era,

private boolean finish = false;

in onCreate() della funzione principale,

if(intent.getBooleanExtra("EXIT", false)) { 
     finish(); 
     finish = true; 
    } 

e ho messo un controllo in tutte le navigazioni

if(!finish) { 
     Intent intent = new Intent(MainActivity.this, LoginActivity.class); 
     startActivity(intent); 
     finish(); 
    } 

La mia funzione di uscita è stato,

Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.putExtra("EXIT", true); 
    startActivity(intent);