2014-03-28 28 views
1

我有一項服務,一旦它完成一項任務,它就啓動一個意圖,從我的應用程序開始一個活動。像這樣:開始活動並將其帶到前面

Intent i = new Intent(MyService.this, MyActivityToBringToFront.class); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
//i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
//i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
//i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(i); 

即使在我的應用程序關閉後,此服務仍可以運行。在這種情況下,我的應用程序關閉了,我需要它將活動帶到用戶目前正在做的事情的前面。所以,如果用戶在不同的應用程序,我需要我的活動在前面彈出。這可能嗎。這些旗幟都沒有任何效果。基本上我需要它像系統電話應用程序。當你接到電話時,它總是把電話帶到前面。我怎樣才能做到這一點?謝謝!

回答

1

首先,你需要保持上下文在內存中,使意圖的。

次要的你需要一個機制,可以每24小時重新獲得你的上下文,因爲通常情況下24小時內保持活躍。

之後。

從服務啓動活動:

Intent dialogIntent = new Intent(getBaseContext(), myActivity.class); 
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplication().startActivity(dialogIntent); 

來源:https://stackoverflow.com/a/3607934/2956344

要推頂活動添加

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
0
Intent i = new Intent(); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.setAction("android.intent.action.VIEW"); 

i.setComponent(ComponentName.unflattenFromString("com.example.package/com.example.package.activityName")); 

startActivity(i); 
+0

我用這個,它和我的其他代碼做同樣的事情。它會開始我想要的活動,但它始終在後臺。所以,如果我目前正在使用谷歌播放應用程序,例如一旦我的服務完成,它會把我的活動放在谷歌播放後面。所以我不知道,直到我退出谷歌播放服務已完成...任何其他的想法?謝謝 – alexward1230

0

啓動從服務活動並不總是一個好主意。你可能想要使用通知。如果用戶點擊通知,那就是您顯示活動的時間。

1
Intent i = new Intent(MyService.this, MyActivityToBringToFront.class); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP); 
context.startActivity(i); 

和API參考是

如果設置,以及正在啓動的活動中 當前任務已在運行,然後,而不是發動那 活動的新實例,所有其他的在此之上的活動將被關閉,並且 這個意圖將作爲 新的意圖被傳送到(現在在上面)舊的活動。

例如,考慮一個由任務的活動:A,B,C,D. 如果d用解析爲活動B的 成分的意圖調用startActivity(),則C和d將是成品和B收到 給定的意圖,導致堆棧現在正在:A,B。

活動B在上面的例子中當前運行的實例將 要麼接受新的意圖你是從這裏開始,在其 onNewIntent( )方法,或者自己完成並重新啓動新的意圖。如果它已宣佈其啓動模式爲「多個」(默認爲 ),並且您沒有將FLAG_ACTIVITY_SINGLE_TOP設置爲相同的 意圖,則它將被完成並重新創建;對於其他所有啓動 模式的FLAG_ACTIVITY_SINGLE_TOP,如果設置了FLAG_ACTIVITY_SINGLE_TOP,則此Intent將被傳送到當前實例的onNewIntent()中 。

這次發射模式也可以用來結合良好的效果與 FLAG_ACTIVITY_NEW_TASK:如果用於啓動任務的根系活力, 它會帶來該任務的當前運行實例的 前景,然後清除它到了根狀態。例如,在從通知 管理器啓動活動時,這尤其有用,例如: 。