0

Привет Я создал намерение уведомления следующим образомуведомление Android GCM не перенаправляет intented активности, когда приложение находится в фоновом режиме

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
     .setSmallIcon(getNotificationIcon()) 
     .setContentTitle(title) 
     .setContentText(text) 
     .setAutoCancel(true) 
     .setSound(defaultSoundUri) 
     .setContentIntent(pendingIntent); 


int notification_id = (int) System.currentTimeMillis(); 
notificationManager.notify(notification_id, notificationBuilder.build()); 

Все работает отлично, если приложение закрыто. Но если приложение работает в фоновом режиме, оно просто всплывает в последний раз, открывая активность с фона на передний план. Я хочу перейти к точной странице, полученной в данных. Кто-то помогает, я пробовал много комбинаций FLAGS.

+0

попробуйте это намерение.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); –

+1

Добавьте код манифеста для активности, которую вы хотите начать с уведомления. –

+0

Просьба опубликовать манифест –

ответ

0

AS @rahul указал, если изменить PendingIntent.FLAG_UPDATE_CURRENT к Intent.FLAG_NEW_ACTIVITY_TASK он работает, как я требовал, но одна проблема, которую я основал, что если в панели уведомлений имеется несколько уведомлений, будет действовать только одно действие. Когда вы нажмете на оставшиеся, он просто очистится оттуда, никакие действия не будут работать. Правильное решение -

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
         .setSmallIcon(getNotificationIcon()) 
         .setContentTitle(title) 
         .setContentText(text) 
         .setAutoCancel(true) 
         .setSound(defaultSoundUri) 
         .setContentIntent(pendingIntent); 
+2

Вызов 'setFlags()' дважды, как это, перезаписывает флаги вторым вызовом. В итоге вы получите только набор FLAG_ACTIVITY_NEW_TASK, который вам не нужен. Либо используйте 'addFlags()' вместо 'setFlags()' либо поместите оба флага в аргумент 'setFlags()' следующим образом: 'setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK) ' –

0

Вместо этого

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

Попробуйте это в своем намерении

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

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

+0

Не работает. При установке вышеуказанных флагов отображается текущее открытое действие. Я хочу получать вызов onCreate каждый раз, когда я нажимаю уведомление о том, что приложение находится в фоновом режиме или foreground.l. –

+0

Вы добавили android: exported = "true" в свой андроид манифест внутри тега активности, который должен быть открыт после нажатия уведомление? – Anurag

3

Просто работа вокруг попробовать это

PendingIntent.getActivity(context, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK); 

вместо

PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
+0

Работал. Но Studio покажет предупреждение в строке 'Должно быть на или больше: PendingIntent .......' –

+0

Вы должны передать PendingIntent.FLAG_ONE_SHOT по месту Intent.FLAG_ACTIVITY_NEW_TASK, потому что этот флаг Intent не рекомендуется для метода PendingIntent.getActivity , –

+1

Передача 'Intent.FLAG_ACTIVITY _...' вызова' PendingIntent.getActivity() 'неверна. Этот вызов принимает флаги «PendingIntent», а не флаги «Intent». –

0

Добавить флаг для устранения существующих задач и начать новую задачу.

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); 
+0

' FLAG_ACTIVITY_CLEAR_TOP' не имеет значения и избыточен, если вы укажете 'FLAG_ACTIVITY_CLEAR_TASK' –

0

Если вы хотите использовать Intent.FLAG_ACTIVITY_CLEAR_TASK вы должны также использоватьIntent.FLAG_ACTIVITY_NEW_TASK. Об этом даже говорится в документации.