2011-03-16 51 views
6

我該怎麼做,Web瀏覽器調用自定義方案來啓動一個活動,然後我想我按下後退按鈕,但不返回Web瀏覽器。我該如何在Android中做到這一點。活動 - > WebBrowser - > Acrivity,但按返回看不到WebBrowser

我只是想實現轉發,當我打電話給Web瀏覽器,然後打電話給我的計劃開始另一個活動。當我回來時,我不想看到網絡瀏覽器。

我該怎麼做?

Intent i = new Intent(Intent.ACTION_VIEW); 
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
i.setData(Uri.parse(url)); 
startActivity(i); 

我已經添加了它,但它不起作用!

回答

0

這可能是因爲第二個活動是發射到相同的任務,你開始從瀏覽器,這意味着開始你第二個活動返回到已存在的任務,並將最頂端的活動(活動1)推送到後端堆棧。見here

如果您在不同的任務中啓動第二個活動,則按「返回」應結束該任務並返回到瀏覽器後面的任務。

要做到這一點,您可以在意向開始活動2中使用FLAG_ACTIVITY_NEW_TASK,或在清單中將活動的android:launchMode屬性設置爲singleTop

+0

謝謝。我知道了! – HiMing 2011-03-17 13:54:05

1

當你也許打開你的意圖,你可以沒有歷史標誌設置

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
+0

我添加了它,但它不起作用! – HiMing 2011-03-17 11:52:50

+0

你能告訴我什麼是序列嗎? – papachan 2011-03-18 14:43:24

0

我發現只有Intent.FLAG_ACTIVITY_NO_HISTORY只在瀏覽器沒有運行之前有效。如果我重新啓動Android並運行我的應用程序調用瀏覽器一切正常。但是當我在我的應用程序之前啓動瀏覽器時,瀏覽器將停留在歷史中

我試圖根據user634618添加到清單中的活動定義android:launchMode =「singleTop」。但它不起作用。我不明白爲什麼singleTop應該有所幫助。

documentation也是這樣:

BlockquoteAs另一個例子,Android的瀏覽器應用程序聲明web瀏覽器活動應該總是以自己的任務由元素指定singleTask啓動模式打開。這意味着如果您的應用程序發出打開Android瀏覽器的意圖,則其活動不會與您的應用程序處於相同的任務中。相反,爲瀏覽器啓動一個新任務,或者如果瀏覽器已經有一個任務在後臺運行,那麼該任務將被提出來處理新的意圖。

我認爲這會導致問題。但是如何在當前任務中強制運行瀏覽器?

6

正如其他用戶所解釋的,您的Activity正在瀏覽器堆棧上創建。您無法阻止瀏覽器在自己的堆棧上打開,但可以在應用程序上執行相同的配置。

在你的活動,是由瀏覽器調用,添加下列清單檔案中的:

android:allowTaskReparenting="true" 
android:launchMode="singleTask" 

這將使您的活動將您的應用程序堆棧(而不是瀏覽器)上創建。這將基本上將您的應用程序帶回前臺。

android:launchMode =「singleTop」將不起作用,因爲它阻止了僅在該活動位於堆棧頂部時才創建新活動,而瀏覽器當前位於頂部的情況並非如此。 android:launchMode =「singleTask」將確保不會創建其他實例,無論它們是否在頂部。

如果您將Intent.FLAG_ACTIVITY_NO_HISTORY設置爲上面的配置,那麼無論瀏覽器是否先前打開或沒有打開,一切都應該正常工作。在最糟糕的情況下,瀏覽器將位於堆棧的底部,如果你繼續回擊,最終會到達瀏覽器而不是退出應用程序。

+0

我剛編輯我的答案。 android:launchMode =「singleTask」是它在您的應用程序任務中創建Activity所必需的。瀏覽器將保留在歷史記錄中,不管標記如何,但它確實將被移到堆棧的底部。 – AngraX 2011-08-31 18:39:11

0

我也遇到這個問題。總結如下:

  1. 如果瀏覽器之前沒有運行,它可以很好地處理上面的問題;如果瀏覽器之前運行:
  2. intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)不起作用;
  3. android:allowTaskReparenting="true" android:launchMode="singleTask"看起來像將瀏覽器放在活動堆棧的底部,但退出應用程序後(通過BACK鍵),最終瀏覽器再次啓動。

所以基本上這個問題依然存在。 如果我找到解決方法,我會發布。

+0

無法找到任何解決方案... 因此,最後一個選項是覆蓋BACK鍵處理程序,以在按BACK鍵後啓動HOME屏幕,只要該活動旨在回到BACK鍵的主屏幕即可。 醜陋,但作品。 – Mine 2012-01-12 04:33:26

相關問題