2013-02-12 47 views
2

我在Android中實現oauth登錄,並且我被困在一個點上。我需要重定向到本地瀏覽器以啓動登錄(而不是使用我自己的嵌入式WebView),但這會導致後退堆棧出現問題。我的目標很簡單:在重定向後返回到我的活動,而不在後端堆棧中顯示本機瀏覽器的蹤跡。這裏是最接近我已經走了這麼遠:在Android上oauth登錄後管理後端堆棧

啓動從我的活動登錄我用:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY 
     | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
    context.startActivity(intent); 

我有一個單獨的活動來接收返回的重定向和處理登錄過程的其餘部分。我並不在乎它是否是一項單獨的活動,而只是我目前的解決方案。在其清單中,我設置了android:noHistory="true"。一旦完成登錄過程,我嘗試使用這樣的代碼,返回的第一個活動:

Intent intent = new Intent(context, OrigActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    context.startActivity(intent); 

然而,這最終建立原活動的第二個副本,當我按回到返回我到第一個副本。換句話說,它似乎並不尊重FLAG_ACTIVITY_CLEAR_TOP。儘管我所有的搜索都有,但是我錯過了簡單的工作嗎?或者還有其他方法可以解決這一切嗎?

編輯:事實證明,問題源於瀏覽器在單獨的任務中啓動的事實。從一些Android文檔:

...如果您的應用程序意圖打開Android瀏覽器,其活動不會與您的應用程序處於同一任務中。相反,爲瀏覽器啓動一個新任務,或者如果瀏覽器已經有一個任務在後臺運行,那麼該任務將被提出來處理新的意圖。

如果我把我原來的活動的推出模式singleTask它正確地將其帶到前臺,而不是創建一個新的副本,但發生新的問題。瀏覽器現在在我的所有活動背後,所以現在看來​​FLAG_ACTIVITY_NO_HISTORY沒有得到尊重。我不知道這是否能讓我更接近正確的解決方案...

編輯2:更正:如果在我啓動瀏覽器之前,瀏覽器沒有運行,那麼一切正常。但是,如果它已經運行FLAG_ACTIVITY_NO_HISTORY似乎對它沒有影響。

回答

0

你所看到的是有道理的,因爲使用FLAG_ACTIVITY_NO_HISTORY調用瀏覽器不會將堆棧從PRIOR移回到應用程序的開頭。