簡體   English   中英

從Android通知欄啟動應用。 如何啟動應用程序的新實例而不是恢復后台進程?

[英]Launching app from Android Notification Bar. How to start a fresh instance of application rather than resume background process?

每當收到推送請求時,我都設法從我們的應用程序獲得通知,以顯示在屏幕頂部的通知欄上。 我的應用程序是視圖層次結構。 我的主屏幕帶有列表視圖。 單擊這些列表視圖項之一時,它會打開一個摘要屏幕(也包含一個列表視圖),而單擊摘要屏幕列表視圖項中的一個時,它將打開一個詳細信息屏幕(層次結構中的最后一個屏幕)。 用戶可以單擊“后退”按鈕將層次結構返回到主屏幕(或主屏幕)。

現在,我的應用程序以及與此相關的大多數應用程序傾向於在后台運行,直到后退按鈕被按下足夠的次數為止。 我將Notification設置為在單擊mainScreen的實例時啟動它。 問題是,如果該應用程序已經在運行,那么我會在所有其他屏幕上創建另一個主屏幕,因此,當用戶單擊主屏幕上的“后退”按鈕(希望退出該應用程序)時,他將返回當他讓我的應用在后台運行時,無論屏幕處於活動狀態。

因此,我可能會像這樣備份層次結構:mainScreen-> detailsS​​creen-> summaryScreen-> mainScreen-> EXIT

當用戶單擊我的通知時,有沒有辦法我可以殺死應用程序並啟動一個新實例? 通常如何處理這些通知點擊?

希望這是有道理的。

謝謝。

(有趣的是:除了一個問題,一切都按預期方式工作。當我說detailScreen(示例中的activityB)是層次結構中的最后一個時,我並不完全誠實。在此屏幕上,用戶實際上可以選擇查看地圖

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
                Uri.parse("geo:0,0?q=" + depLatitude + "," + depLongitude + "(" + name + ")"));
                startActivity(intent);

當我在地圖上按回時,理想的情況是使其返回到detailsS​​creen,但在這種情況下,它又回到了主屏幕。

有任何想法嗎?

您可以使用“重新排序”將屬性置於最前面,並使mainScreen的相同實例到達頂部。 對於銷毀您不希望在后台運行的活動,請使用noHistory屬性

MainActivity → Activity A → Activity B → Activity A

從MainActivity啟動活動A

Intent intentA = new Intent(MainActivity.this, ActivityA.class);
startActivity(intentA);

在此代碼段中,我們以標准模式啟動活動A。

從活動A啟動活動B

活動B是通過活動A的Intent標志啟動的:Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

Intent intentB = new Intent(ActivityA.this, ActivityB.class);
intentB.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intentB);

從活動B啟動活動A

當從活動B啟動活動A時,活動的先前實例將重新排序到最前面,而不是創建一個新實例

Intent intentA = new Intent(MainActivity.this, ActivityA.class);
startActivity(intentA);

沒有歷史

<activity android:noHistory="true" ../>

當用戶離開活動並在屏幕上不再可見時,是否應該從活動堆棧中刪除該活動並完成(調用了finish()方法)-如果應結束,則為“ true”,否則為“ false”如果不。 默認值為“ false”。 值為“ true”表示該活動將不會留下歷史痕跡。 它不會保留在任務的活動堆棧中,因此用戶將無法返回到該任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM