Как перенести приложение на передний план при нажатии на значок уведомления (из Сервиса)?

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

Мое уведомление выглядит так:

private void notifyMe() { final NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Notification note = new Notification(R.drawable.icon_audio, "Online!", System.currentTimeMillis()); note.flags = Notification.FLAG_ONGOING_EVENT; PendingIntent i = PendingIntent.getActivity(this, 0, new Intent(this, PlayMedia.class), 0); note.setLatestEventInfo(this, "Media Payer", "Online",i); mgr.notify(NOTIFY_ME_ID, note); } 

РЕШЕНИЕ Я получил его для работы, добавив следующую строку в файл манифеста: android: launchMode = "singleInstance" Флаг намерения не имел никакого эффекта, подумал, что это было странно …

Solutions Collecting From Web of "Как перенести приложение на передний план при нажатии на значок уведомления (из Сервиса)?"

У намерения, которое вы передаете PendingIntent.getActivity, должен быть установлен соответствующий флаг для запуска запущенного приложения на передний план. Так:

 Intent startActivity = new Intent(this,PlayMedia.class ); startActivity.setFlags(Intent.*appropriate flag*); PendingIntent i = PendingIntent.getActivity(this, 0, startActivity, 0); 

Перейдите в http://developer.android.com/reference/android/content/Intent.html и выполните поиск (ctrl + f) для «flag_». Там вы найдете список флагов, которые вы можете использовать.

Просто вариант ответа и комментарий по этому вопросу. Мне не нужно было добавлять android: launchMode = "singleInstance", как предлагает Альпар. Это то, что я сделал, чтобы приложение вышло на передний план.

 // this code brings the application from background to foreground // when the Notification icon is clicked on. // create new notification int icon = R.drawable.ic_notify; Notification notification = new Notification(icon, "Ticker Text", System.currentTimeMillis()); // Create new Intent pointing to activity you want it to come back to Intent notificationIntent = new Intent(this, MainApp.class); // Add new intent to a pending intent PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); // add that pendingIntent to the new notification notification.setLatestEventInfo(getApplicationContext(), "Title", "Text", contentIntent); // send the intent to the NotificationManager ((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)).notify(UPLOADER_ID, notification); 

Все это больше не работает в Android 5. Я пробовал все вышеперечисленные предложения, и мое приложение постоянно уничтожалось и перезапускалось всякий раз, когда я нажимал на уведомление.

Чтобы исправить это, все, что мне нужно было сделать, это добавить 2 флага в намерение:

 Intent resultIntent = new Intent(context, MainActivity.class); resultIntent.setAction(Intent.ACTION_MAIN); resultIntent.addCategory(Intent.CATEGORY_LAUNCHER); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, resultIntent, 0); 

Это вернет ваше приложение обратно, как если бы оно было снято с экрана запуска.