2013-10-15 44 views
0

我有一個應用程序,我用launchMode =「singleTask」保留了所有的活動。我更喜歡做旗幟湯(混合組合以獲得所需效果),並基於接收onNewIntent調用。從通知Android的恢復活動堆棧完全像歷史選擇一樣

但是,我有以下問題。

如果我啓動應用程序,那麼R活動就會開始(有啓動器,名冊活動)。

然後我啓動活動S.

(1)如果我按home鍵,我把應用程序的背景,然後我按歷史按鈕(從右端的按鈕上的Nexus 4,我想它就是這樣調用的)我會按照我按下home按鈕之後離開它的相同狀態顯示S活動。但是,如果我按主頁按鈕並將應用程序置於後臺,然後單擊通知以啓動我的應用程序,則會啓動R活動,併爲其調用onNewIntent。

基本上我想在第二種情況下的同樣的行爲也。我點擊通知時推出這樣的應用程序:

Intent rosterIntent = new Intent(this, RosterActivity.class); 
    rosterIntent.addCategory(Intent.CATEGORY_DEFAULT); 
    rosterIntent.setAction(Intent.ACTION_MAIN); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 2, 
    rosterIntent, 0); 

這似乎這樣就足以重新啓動在我離開它在相同狀態下的應用,但它不工作。也許是因爲我有我的所有活動singleTask ...

有人可以告訴我,如果我需要添加更多的標誌給我的意圖,或待定的意圖獲得我想要的?

問候,

注:看來,點擊啓動器圖標後,該應用程序在後臺有一個像(2),歷史(1),所以只選擇是,我想要的行爲相同的行爲。

+0

發佈您的清單。一般來說,使用特殊的啓動模式是一個非常糟糕的主意。一旦我看到你的清單,我可以告訴你更多。 –

回答

0

我使用來自支持庫的NotificationCompat。我想你需要添加這些標誌:

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP 
         | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY); 

和建設者:

builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 

如若作品。

0

您應該在您的AndoridManifest.xml文件中將android:launchMode="singleTop添加到您的活動聲明標籤中。

<activity 
     android:name="co.ramansoft.lyricsplayer.MainActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
</activity>