2012-01-04 64 views
3

這是我sistuation如何從服務與通知欄

A1 =閃屏活動

A2 =主要活動

A3 =額外活動

S1 = GPS服務調用活動

我從A1開始創建意圖啓動A2,然後A1完成。 A2的內部創建和綁定S1(裏面S1我做一個通知)

CharSequence text = getText(R.string.local_service_started); 

Notification notification = new Notification(R.drawable.notify_icon, text, System.currentTimeMillis()); 

Intent i = new Intent(); 
i.setClassName("xxx.yyy.zzz.kkk", "xxx.yyy.zzz.kkk.A2"); 
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 

notification.setLatestEventInfo(this, getText(R.string.local_service_label), text, contentIntent); 
mNM.notify(NOTIFICATION, notification); 

現在,我有我的通知吧 圖標,如果我按HOME鍵我A2活動中,並打開另一個應用程序,然後我按我的通知圖標都正常工作,並且關閉了我的A2活動(A2是最活躍的活動),但是如果在A2內部啓動A3並返回HOME並按通知我遇到問題,則將A2創建爲新實例(A2現在不是最上面的)!是否有可能像長時間按住HOME一樣的效果並將最後一次打開的活動集中在我的應用程序中?我不想打開一個特定的活動,但在沒有活動的新實例的情況下將暫停的活動放在前面。

回答

4

我已經解決了,這打開我的應用程序保存實際狀態,並獲得打開的活動回窗體背景foregraund。做同樣的想法應用程序選擇從RECENTS!

Intent i = new Intent(); 
i.setAction(Intent.ACTION_MAIN); 
i.addCategory(Intent.CATEGORY_LAUNCHER); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY); 
i.setComponent(new ComponentName(getApplicationContext().getPackageName(), MyAppClass.class.getName())); 

MyAppClass是您的APK啓動的第一個活動。

問候

+0

偉大的解決方案。 – user65721 2013-10-26 11:08:27

+0

不錯的工作...... :) +1 – jagdish 2014-11-17 13:33:39

0

您可以創建一個在onCreate()中完成自己的Activity,並從您的通知中啓動該活動。

public void onCreate(Bundle b){ 
    super.onCreate(b); 
    finish(); 
    if(isTaskRoot()){ 
    // main Activity is not running, start it here 
    } 
} 
0

這可能是另外一個問題重複,但我還沒有找到一個完整的答案,因此通過試錯......你要設置的動作和類別。試試看。

final Intent notificationIntent = new Intent(context.getApplicationContext(),       MainActivity.class); 
notificationIntent.putExtra("extra", "value"); 
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
         | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
notificationIntent.setAction("android.intent.action.MAIN"); 
notificationIntent.addCategory("android.intent.category.LAUNCHER"); 

final PendingIntent contentIntent = PendingIntent 
         .getActivity(this, 0, notificationIntent,0); // didn't work: PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT); 
+0

完美工作的具體意圖,坦克你非常多,但如果我也想保留活動堆棧和只專注於頂級的活動?我該怎麼做? – GMG 2012-01-04 20:35:54

+0

哦,對我來說工作得很好,因爲我將所有活動作爲主要活動中的碎片進行託管。嘗試殺死CLEAR_TOP和SINGLE_TOP標誌 – ImplexOne 2012-01-04 21:59:39