4

我有一個音樂流應用程序,並且希望在音樂流式傳輸時顯示前臺通知。我做的是流在一個單獨的服務,我使用的前景通知的代碼如下:Android中的前臺通知會啓動新的活動(通過pendingIntent)而不是現有的活動

Notification notification = new Notification(R.drawable.ic_stat_notification, getString(R.string.app_name), System.currentTimeMillis()); 
Intent notificationIntent = new Intent(this, PlayerActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
notification.setLatestEventInfo(this,getString(R.string.app_name), 
        getString(R.string.streaming), pendingIntent); 
startForeground(4711, notification); 

符號顯示在任務欄,如果我的通知點擊應用程序打開,但它是一個全新的活動(我猜是因爲創建了一個新的Intent)。所以如果我有例如在應用程序中打開的對話框不會打開,如果我關閉應用程序(單擊主頁),然後在通知欄中滑動/單擊應用程序圖標。我如何處理這個問題,以便顯示「舊/真實」活動?

回答

16

您需要爲此使用標誌。你可以在這裏閱讀的標誌了:http://developer.android.com/reference/android/content/Intent.html

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

從上面的鏈接:

如果設置,活動將不會啓動,如果它已經在歷史堆棧的頂部運行。

單頂標記將啓動一個新的活動,如果還沒有運行,如果有一個實例已經運行,然後意圖將被髮送到onNewIntent()

+0

糟糕的是你沒有提到'android:launchMode =「singleTop」'as user http://stackoverflow.com/a/13876977/4548520 – user25 2017-02-04 19:01:26

3

//你的活動

Notification notification = new Notification(R.drawable.ic_stat_notification, getString(R.string.app_name), System.currentTimeMillis()); 
Intent notificationIntent = new Intent(this, PlayerActivity.class); 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
notification.setLatestEventInfo(this,getString(R.string.app_name), 
        getString(R.string.streaming), pendingIntent); 
startForeground(4711, notification); 

//在您的清單

android:name="com.package.player.MusicPlayerActivity" 

android:launchMode="singleTop" 
0

只需使用的PendingIntent當你創建你的通知:

PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(), 
      0, new Intent(getActivity(), WantedActivity.class), 0); 

,不要忘記將其設置在Notification Builder中:

.setContentIntent(pendingIntent)