2012-04-03 94 views
1

我有一個Android應用程序,我希望其他應用程序能夠通過意圖啓動。這將允許其他應用程序來與我互動,並提供初始投入等如何處理Android兒童活動沒有完成

主叫應用(稱之爲應用-A)進行以下操作:

Intent intent = new Intent("com.myapp.dosomething"); 
intent.putExtra("com.myapp.value1", "1.25"); 
intent.putExtra("com.myapp.value2", "bob"); 

startActivity(intent); 

我的活動開始與意圖過濾器:

如果用戶經過我的應用程序的正常流動
<intent-filter> 
<action android:name="com.myapp.dosomething" /> 
<category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

,一切工作正常。用戶做的東西,然後當我知道用戶完成時,我打電話給我的活動finish()。一切都很華麗。

但是,如果通過我的應用程序做的東西的用戶部分的方式打回家按鈕,而不是結束,我們結束了一個重大問題的任務。如果他們嘗試從啓動器重新啓動App-A,我的應用程序將彈出。如果沒有強制殺死我的應用程序,用戶永遠無法回到App-A。更糟糕的是,我的應用程序專門設計爲在啓動之間不保留任何數據,當以這種方式重新啓動時,它也不會獲得最初傳入的任何額外數據,所以我的應用程序無法知道這個其他應用程序是還在等我。

我該如何設置,以便App-A不會坐在那裏等待我的應用程序?無論我的應用程序做什麼,它都應該能夠繼續運行。如果我的應用程序崩潰,或者沒有返回值,我不希望呼叫應用程序被永久掛起。

任何想法?

謝謝。

+0

「用戶永遠無法返回到應用程序-A而沒有強制殺死我的應用程序」 - 爲什麼他們不能點擊BACK按鈕?它適用於類似的情況。 – Squonk 2012-04-03 23:38:39

+0

那麼,作爲一個用戶,如果我啓動應用程序A,我不希望應用程序B出現,無論上次運行應用程序的時間。此外,由於各種原因,我們目前阻止後退按鈕(這將很快發生變化,這在項目開始時是一個糟糕的設計決定)。但無論如何,當您首先嚐試啓動應用程序a時,我們的應用程序不應該啓動。必須有一些活動處理兒童活動的機制! – user456771 2012-04-03 23:44:53

+0

好的 - 我很欣賞你想要清理一些東西,但這就是Android默認運行的方式。在我的情況下,我的應用程序在用戶的家用PC上顯示視頻列表。如果他們選擇了一個視頻,我的應用會啓動第三方視頻播放器應用來流式傳輸視頻。如果用戶點擊HOME,然後再次啓動我的應用程序,它會繼續使用第三方應用程序播放視頻。換句話說,用戶使用我的應用程序的最後一個動作是開始播放視頻,爲什麼他們不應該這樣做呢?順便說一句,這是我誰upvoted你的問題,因爲我很好奇答案,即使我不認爲違約行爲是錯誤的。 – Squonk 2012-04-03 23:55:21

回答

0

結束時: 如果您的應用程序啓動並且未發送必要的數據,那麼您描述的情況可能只是發生,因此立即完成並指示錯誤(假設您的應用程序是使用startActivityForResult調用的,則可以發送結果代碼指示錯誤)。你不再需要你的內容,等待你的應用程序無法獲取其數據,用戶也可能被帶回到他們期望的應用程序中。

在他們結束: 調用應用程序應該添加的標誌:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 

此標誌將清除活動堆棧的名爲app,讓用戶在調用應用程序重新啓動下一次預期的地方到達。

基本上,你可以盡你所能地處理這種情況,但它的調用應用程序的職責添加此標誌,並適當地處理這種情況。

+0

調用應用程序需要做什麼來處理這個問題嗎?我嘗試添加清除任務重置標誌時,它似乎沒有任何區別。如果我的應用程序沒有調用finish()並且調用應用程序再次啓動,那麼用戶仍然會被推回到我的應用程序中。 – user456771 2012-04-04 17:49:53

+0

我應該注意,在我的測試中,我假設用戶放棄了由於電話或某些其他中斷而不是由於輸入錯誤導致的任務,所以我的應用沒有完成錯誤或任何事情。正如我在另一條評論中提到的那樣,我的應用程序無法繼續保留它的位置,因爲它是爲了安全原因和我的應用程序的簡歷而特意設計的,以清除「運行」之間的數據(單擊「應用程序」中的調用應用程序圖標啓動器)我沒有收到額外的意圖數據,因此我無法知道我應該對呼叫者作出響應。 – user456771 2012-04-04 17:59:28

0

經過大量的擺弄這個的真的似乎推出標誌等是沒有任何幫助都沒有。唯一真正的解決方案是跟蹤我的應用何時從外部啓動,並確保在此情況下暫停應用時總是關閉結束。

通過總是在onPause完成我確保調用應用程序總是得到某種響應。在中斷操作的情況下,我只是回傳'取消'的結果。

相關問題