Уведомление Foreground в Android запускает новую активность (через pendingIntent) вместо существующей - PullRequest
4 голосов
/ 09 марта 2012

У меня есть приложение для прослушивания музыки, и я хочу отображать уведомление на переднем плане, когда музыка идет в потоковом режиме.Я делаю потоковую передачу в отдельной службе, и код, который я использую для уведомления переднего плана, выглядит следующим образом:

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

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

Ответы [ 3 ]

16 голосов
/ 09 марта 2012

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

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

По ссылке выше:

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

Флаг с одним верхним запустит новую активность, если она еще не запущена, если уже запущен экземпляр, то намерение будет отправлено на onNewIntent().

3 голосов
/ 14 декабря 2012

// в вашей деятельности

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 голосов
/ 19 июня 2015

Просто используйте PendingIntent при создании уведомления:

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

и не забудьте установить его в построителе уведомлений:

.setContentIntent(pendingIntent)
...