2012-01-25 39 views
1

我工作的一個Android應用程序的窗口小部件,我遇到的一個問題。當用戶點擊小部件時,我希望應用程序打開他的第一個活動(具有intent-filter的行爲:'action.MAIN'/'category.LAUNCHER'​​)(我將其稱爲活動A)。安卓:意向開錯了活動

要做到這一點,我用這個片段(在我WidgetProvider類):

Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
views.setOnClickPendingIntent(R.id.view , pendingIntent); 

如果我的申請被打死這個作品非常好,如果所有的活動都被關閉(採用背面按鈕,直到應用程序關閉)

的問題時,幾個活動是開放的發生。想象活動堆棧是這樣的:活性 - >活動 - >活動Ç。 如果我點擊小工具,有時候應用程序剛剛被帶到前面,活動C是可見的而不是活動A。 這很奇怪,因爲這不會每次都發生。 (這似乎是我在導航了很多活動之後發生的)

我真的需要活動A來打開活動堆棧,而不是另一個活動,因爲這個活動就像是一個具有多個不同功能鏈接的集線器。

有人可以幫我嗎?

非常感謝。

PS:很抱歉,如果我的英語是相當差,我從比利時

+1

難道你只是在你啓動下一個活動時調用finish()嗎?它不應該重新出現。 – nik431

+0

這是不可想象的。如果我這樣做,只要用戶按下後退按鈕,應用程序就會停止。 – Valentin

回答

0

是如果你想有一個特定的活動推出,爲什麼你不只是調用該活動具體而言,而不是動態的。

您遇到在你的後面,堆由於活動的問題。 Android以一種非常特殊的方式管理您的活動的生命週期,您應該研究 - http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

調用finish() - 將始終返回到啓動當前活動的活動。只有當您的應用關閉時,纔會有原始活動。你總是可以測試這種情況,如果調用活動是NULL,你可以明確地給你打電話的活動A.

+0

我瞭解Android管理活動的方式。問題在於,當我從我的窗口小部件打開要打開的活動(即使明確地說,在這種情況下,活動A)時,應用程序有時會打開活動C(如果活動堆棧是A-B-C) – Valentin

2

從你應該做一個小部件或多或少作爲系統啓動與意圖不相同。

嘗試在你的意圖使用FLAG_ACTIVITY_CLEAR_TOP。你也想看看FLAG_ACTIVITY_NEW_TASK

順便說一下,最好跟隨the platform guidelines,也就是說,如果您再次向用戶提供正確的導航路徑,您還可以深入注入您的應用。