2014-02-07 72 views
2

我們正在與意圖過濾器下面寫一個Android應用:在Android中,你可以讓Gmail在一個單獨的任務中運行一個意圖嗎?

 <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data 
       android:host="www.appname.com" 
       android:scheme="http" /> 
      <data 
       android:host="www.appname.com" 
       android:scheme="https" /> 
     </intent-filter> 

Android用戶與Gmail誰收到鏈接到我們的應用程序可以選擇我們的應用程序,如下圖所示:

gmail handles our app intent-filter

但是,當我們查看最近的應用程序時,看起來我們的應用程序正在gmail進程中運行,這不是我們想要的。特別是如果應用程序已經在運行,我們希望gmail將正在運行的進程傳遞給應用程序,以便將它加載到我們的應用程序中。參閱Gmail進程如何有一個嵌入(單獨的實例),其內部運行的應用程序,而應用程序在其自己的進程中運行:

gmail app is running a second instance of our app to complete the intent

的意圖過濾器的任何建議,以解決此將不勝感激。 android文檔對這種情況根本沒有幫助。

+2

該屏幕截圖與進程無關。它與任務有關:https://developer.android.com/guide/components/tasks-and-back-stack.html – CommonsWare

+0

謝謝@CommonsWare幫助我獲得命名權,因爲我是相當新的Android系統。另一個任務可以完成Gmail的意圖,比如已經運行的應用程序的任務?運行主要活動的多個副本會很昂貴並且可能不穩定。 – spirographer

+1

在清單中的''上嘗試'android:launchMode =「singleTask」''。 – CommonsWare

回答

3

默認情況下,活動屬於啓動它的任務。在很多情況下,這是正確的答案。

但是,如果您希望控制權轉到正在運行的活動副本(可能是其他任務),請在清單中的<activity>元素上添加android:launchMode="singleTask"。引用the documentation

系統創建一個新任務並在新任務的根目錄下實例化活動。但是,如果活動的實例已經存在於單獨的任務中,則系統通過調用onNewIntent()方法將意圖路由到現有實例,而不是創建新實例。一次只能有一個活動實例。

+0

非常有幫助!我自己啓動模式設置爲「singleTop」而不是「singleTask」。在此之前,如果我試圖在實例已經運行時用它打開文件,我的應用程序似乎掛起。我想我以前必須通過多次使用相同的外部應用程序來啓動我的虛擬測試。該文件說這種模式通常不被推薦,因爲它與用戶期望的不同?我不遵循這一點。誰希望應用在另一個應用中打開而不是從外部打開?參考:http://developer.android.com/guide/topics/manifest/activity-element.html – BuvinJ

相關問題