2010-08-12 2 views
6

Ich arbeite an einer App, die die Browseraktivität startet, um eine Twitter-OAuth-Autorisierung durchzuführen. Dieser Prozess verwendet eine Callback-URL, die die Aktivität, mit der die Browseraktivität gestartet wurde, erneut startet.Öffnen der Browseraktivität, aber verhindern, dass sie im Aktivitätsverlauf enthalten ist

Mein Problem besteht darin, dass die Browser-Seiten im Verlaufsstapel bleiben und wenn der Benutzer dann von den Voreinstellungen, die den Browser gestartet haben, zurückklickt, kehren sie nicht zur Hauptaktivität der App zurück, sondern stattdessen werden zurück zum Browser gebracht. Ich habe versucht, Flags zu dem Start-Intent hinzuzufügen, um den Verlauf zu verhindern und auf Clear zurückzusetzen, aber es scheint nicht zu funktionieren, wenn es auf meinem Telefon läuft, nur auf den Emulatoren.

Hier ist der Code, ich bin mit der Browser-Aktivität zu starten:

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

jemand eine Idee, was falsch sein könnte?

Antwort

0

Anruf

finish(); 

nach

ctx.startActivity(webIntent); 
+0

, die die Aktivität schließen wird, die ich will eigentlich offen bleiben, hier eine Abfolge von Ereignissen ist . App startet mit einer MainActivity, der Benutzer öffnet PreferencesActivity, dann klickt der Benutzer auf Authorize Twitter, der die Browseraktivität mit dem obigen Code startet, und übergibt ihm eine Callback-URL, für die PreferencesActivity einen Intent-Filter hat. Der Benutzer meldet sich bei Twitter an, autorisiert ihn für die Verwendung durch die App und der Browser führt die Callback-URL aus, die PreferencesActivity durch den Intent-Filter wieder aktiviert. Wenn der Benutzer zu diesem Zeitpunkt auf die Schaltfläche "Zurück" klickt, möchte ich, dass er zu MainActivity zurückkehrt. – jaredbro

+0

Warum reaktivieren Sie PreferencesActivity mit dem IntentFilter statt startActivityForResult? Ich bin mir nicht sicher, ob es in Ihrem Fall funktioniert, da ich die Details Ihres Codes nicht kenne, aber könnte das eine Idee sein? Auf diese Weise würden Sie wirklich zurück in die Stapelhistorie gehen, anstatt eine andere Instanz von PreferencesActivity zu öffnen. Nicht sicher, wenn es das ist, was es jetzt macht, einfacher zu sehen mit dem kompletten Code, Callbacks, Intent-Filter, etc. –

0

Hallo habe ich das gleiche Problem im Moment. Ich denke, die Lösung ist, die Aktivität, die Sie mit einem speziellen Flag zurückkehren wollen zu starten:

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

Das Problem ist, dass es nicht funktioniert (auf 1,6 mindestens) .. Aber vielleicht findet jemand eine Lösung für diesen . Ich denke, FLAG_ACTIVITY_CLEAR_TOP ist genau das, was wir.

+1

Ist dir klar, dass die zweite 'setFlags()' die erste überschreibt?Sie möchten 'addFlags()' verwenden, um Flags für die Absicht additiv zu konfigurieren. – ohhorob

0

Ich fand, dass Intent.FLAG_ACTIVITY_NO_HISTORY funktioniert nur, wenn der Browser zuvor nicht ausgeführt wurde. Wenn ich Android neu starte und meine App starte, läuft der Anrufbrowser alles gut. Aber wenn ich den Browser vor meiner App starte, bleibt der Browser in der Historie. Hier

ist damit verbundene Frage auch, aber ohne wirklich funktionierende Lösung

How can I do that in Android. Activity -> WebBrowser -> Acrivity, but Press Back not see the WebBrowser

2

die Aktivität Flagge Intent.FLAG_ACTIVITY_CLEAR_TOP Stellen nach dem Start. Auf diese Weise wird die Aufgabe Form der App-Stack so Ihre Haupttätigkeit bleibt das oberste auf jedem neuen Start gestrichen:

ctx.startActivity(webIntent); 
browserIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
Verwandte Themen