2010-08-12 85 views
6

我正在開發一個應用程序,該應用程序啓動瀏覽器活動以執行Twitter OAuth授權。這個過程使用了一個回調url,它將首先重新啓動啓動瀏覽器活動的活動。打開瀏覽器活動,但阻止它進入活動歷史記錄

我的問題是,瀏覽器頁面仍然保留在歷史堆棧中,當用戶從首先啓動瀏覽器的首選項活動中單擊時,它們不會回到應用程序的主要活動,而是被帶回瀏覽器。我已經嘗試向啓動的意圖添加標誌以防止歷史記錄和清除重置,但在我的手機上運行時似乎無法工作,只能在仿真器上運行。

這裏是代碼我使用啓動瀏覽器活動:

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

任何人有任何想法可能是錯誤的?呼叫

finish(); 

回答

0

ctx.startActivity(webIntent); 
+0

這將關閉其實我是想保持開放的活動,這裏是事件的順序。 應用程序以MainActivity開頭,用戶打開PreferencesActivity,然後用戶單擊Authorize Twitter,它使用上面的代碼啓動瀏覽器活動,並向它傳遞一個回調URL,其中的PreferencesActivity具有一個意圖過濾器來處理。用戶登錄到Twitter,授權它由應用程序使用,瀏覽器運行回調URL,通過它的意圖過濾器重新激活PreferencesActivity。 目前,如果用戶點擊「返回」鍵,我想讓它返回到MainActivity。 – jaredbro 2010-08-12 11:13:16

+0

爲什麼使用IntentFilter而不是使用startActivityForResult重新激活PreferencesActivity?我不確定它是否適用於你的情況,因爲我不知道你的代碼的細節,但這可能是一個想法嗎?這樣你實際上會真的回到堆棧歷史記錄中,而不是打開另一個PreferencesActivity實例。不知道如果這就是它現在所做的,更容易看到與完整的代碼,回調,意圖過濾器等。 – 2010-08-12 12:10:34

0

嗨,我目前所面對同樣的問題。我認爲,解決的辦法就是啓動你想要用一個特殊的標誌,返回活動:(至少在1.6)

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

的問題是,是不工作。但也許有人找到了一個解決方案。我認爲FLAG_ACTIVITY_CLEAR_TOP正是我們的。

+1

你知道第二個'setFlags()'覆蓋第一個?你想使用'addFlags()'爲intent添加配置標誌。 – ohhorob 2011-12-15 18:17:32

2

設置活動標誌,以Intent.FLAG_ACTIVITY_CLEAR_TOP開始之後。這樣,任務將被刪除表格的應用程序棧中,以便您的主要活動仍然在每一個新推出的頂級之一:

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