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); 

символ показан на панели задач, и если я нажимаю на уведомлении приложение открывает, но это полная новая активность (думаю, из-за создания нового намерения). Поэтому, если у меня есть, например, диалоговое окно, открытое в приложении, не открыто, если я отклоняю приложение (щелкнув по нему), а затем нажимаю/щелкаю значок приложения в панели уведомлений. Как я могу справиться с этим, чтобы показать «старую/реальную» активность?

ответ

16

Для этого вам необходимо использовать флаги. вы можете прочитать на флагах здесь: http://developer.android.com/reference/android/content/Intent.html

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

Из указанной выше ссылке:

Если установлено, активность не будет запущен, если он уже запущен в верхней части стека истории.

Единственный верхний флаг будет начать новый activty если он еще не работает, если есть экземпляр уже запущен, то цель будет отправлена ​​onNewIntent().

+0

плохой вы не упомянули 'android: launchMode =" singleTop "' как пользователь http://stackoverflow.com/a/13876977/4548520 – user25

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)