Как перенести приложение на передний план при нажатии на значок уведомления (из Сервиса)?
У меня есть приложение, которое воспроизводит медиа с помощью службы. Это выполняется плавно с помощью службы (создается постоянное уведомление). При нажатии клавиши "Назад" приложение переходит в фоновый режим. Проблема в том, что когда я нажимаю значок уведомления, каждый раз создается новый экземпляр моего приложения. Как я могу получить свое приложение из фона на передний план с помощью панели уведомлений?
Мое уведомление выглядит следующим образом:
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"
Флаг намерения не имел никакого эффекта, подумал, что это странно...
Ответы
Ответ 1
В намерении, которое вы передаете 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_". Там вы найдете список флагов, которые вы можете использовать.
Ответ 2
Просто вариант ответа и комментарий к вопросу. Мне не нужно было добавлять андроид: 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);
Ответ 3
Все это больше не работает в 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);
Это вернет ваше приложение обратно, как если бы оно было снято с экрана запуска.