Подтвердить что ты не робот

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

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

Мое уведомление выглядит следующим образом:

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" Флаг намерения не имел никакого эффекта, подумал, что это странно...

4b9b3361

Ответ 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);

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