2010-08-12 7 views
6

Sto lavorando a un'app che avvia l'attività del browser per eseguire un'autorizzazione OAuth su Twitter. Questo processo utilizza un url di richiamata che rilancerà l'attività che ha avviato l'attività del browser in primo luogo.L'apertura dell'attività del browser, ma impedisce che si trovi nella cronologia delle attività

Il mio problema è che le pagine del browser rimangono nello stack cronologia e quando l'utente fa quindi clic indietro dall'attività delle preferenze che ha avviato il browser in primo luogo, non tornano all'attività principale dell'app, ma invece sono riportati nel browser. Ho provato ad aggiungere flag all'intento di avvio per prevenire la cronologia e resettare in chiaro, ma non sembra funzionare quando sono in esecuzione sul mio telefono, solo sugli emulatori.

Qui è il codice che sto usando per lanciare l'attività del browser:

   Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)); 

      webIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
      webIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
      webIntent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 

      ctx.startActivity(webIntent); 

Qualcuno ha idea di quello che potrebbe essere sbagliato?

risposta

0

chiamata

finish(); 

dopo

ctx.startActivity(webIntent); 
+0

che chiuderà l'attività che ho effettivamente voglia di rimanere aperti, qui è una sequenza di eventi . L'app inizia con MainActivity, l'utente apre PreferencesActivity, quindi l'utente fa clic su Autorizza Twitter che avvia l'attività del browser con il codice precedente, passandogli un url di richiamata che PreferencesActivity ha un filtro intent per gestire. L'utente accede a Twitter, lo autorizza ad essere utilizzato dall'app e il browser esegue l'url di richiamata che riattiva PreferencesActivity attraverso il suo filtro di intent. In questo momento, se l'utente fa clic sul tasto "Indietro", voglio che torni a MainActivity. – jaredbro

+0

Perché riattivare PreferencesActivity con IntentFilter anziché utilizzare startActivityForResult? Non sono sicuro se funzionerebbe nel tuo caso in quanto non conosco i dettagli del tuo codice, ma potrebbe essere un'idea? In questo modo davvero tornerai nella cronologia dello stack piuttosto che aprire un'altra istanza di PreferencesActivity. Non è sicuro se sia quello che fa adesso, più facile da vedere con il codice completo, i callback, i filtri intent, ecc. –

0

Ciao io ho lo stesso problema al momento. Penso che la soluzione è quella di avviare l'attività che si desidera tornare a con una bandiera speciale:

Intent intent = new Intent(this, acticityToReturnTo.getClass()); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(intent); 

Il problema è che è non funziona (il 1,6 almeno) .. Ma forse qualcuno trova una soluzione per questo . Penso che FLAG_ACTIVITY_CLEAR_TOP sia esattamente ciò che noi.

+1

Ti rendi conto che il secondo 'setFlags()' sta sovrascrivendo il primo?Si desidera utilizzare 'addFlags()' per configurare in modo aggiuntivo i flag per l'intento. – ohhorob

2

Impostare il flag di attività per Intent.FLAG_ACTIVITY_CLEAR_TOP dopo l'avvio di esso. In questo modo, l'attività verrà cancellato forma la pila applicazione in modo che le attività principale rimane quella superiore ad ogni nuovo lancio:

ctx.startActivity(webIntent); 
browserIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
Problemi correlati