2010-08-11 198 views

回答

67

android.app.Serviceandroid.app.Context的後裔,因此您可以直接使用startActivity。但是,由於您在任何活動之外開始此活動,因此您需要在意圖上設置FLAG_ACTIVITY_NEW_TASK標誌。

例如:

Intent i = new Intent(); 
i.setClass(this, MyActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(i); 

其中this爲您服務。

+1

這很好,但每次Activiyt都會像新開始的活動一樣開始。這種呼叫只能工作一次。或者我想念什麼!? – uzay95 2011-06-20 16:45:39

+0

@MarcinGil你知道這是故意的行爲嗎?換句話說,你知道谷歌工程師是否設計了服務,以便能夠在沒有用戶交互的情況下打開一個活動,並且該過程總是流暢? – MikeIsrael 2012-05-01 06:44:24

+0

@MikeIsrael我相信是的。試想一下,在後臺運行的系統服務無法在來電時顯示接受/拒絕活動。既然你是這個服務的開發者,你知道你想要展示什麼活動,這一切都取決於你。您可以使用從您的應用程序啓動的服務來執行一些操作,例如。在某些觸發器上激活應用程序;如通知欄中的更新狀態,並點擊啓動應用程序。 – 2012-05-01 12:04:59

7

我從服務啓動活動時出現問題,這是由於缺少FLAG_ACTIVITY_NEW_TASK意向標誌。

+0

不知道,但我可以開始活動直接從服務沒有任何標誌,它工作正常 – 2017-11-20 07:18:51

7

這無疑將解決你的問題

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
ComponentName cn = new ComponentName(this, TaxiPlexer.class); 
intent.setComponent(cn); 
startActivity(intent); 
+0

你好 我有問題當應用程序從服務(FCM) 關閉時開始活動以上代碼僅在應用程序已打開時起作用。 請幫我打開應用程序從後臺運行服務 – 2016-10-20 09:59:25

18

即使框架允許你從服務開始的活動,它可能不是一個妥善的解決辦法。原因在於服務任務可能是也可能不是用戶在服務希望與用戶交互時的焦點。中斷用戶目前正在做的事情被認爲是糟糕的設計形式,特別是在應該在後臺運行的東西。

因此,您應該考慮使用帶通知服務的通知,該通知服務攜帶PendingIntent以便在用戶決定是否需要調查時啓動所需的活動。把它想成延遲滿足。