0

Salut, j'ai créé une intention de notification comme suitnotification GCM Android ne redirige pas l'activité onformément lorsque l'application est en arrière-plan

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

Tout fonctionne parfaitement si l'application est fermée. Mais si l'application fonctionne en arrière-plan, elle affiche simplement la dernière activité ouverte de l'arrière-plan au premier plan. Je veux aller à la page exacte reçue dans les données. Quelqu'un m'a aidé, j'ai essayé plusieurs combinaisons de FLAGS.

+0

essayez cette intention.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); –

+1

Ajoutez votre code manifeste pour l'activité que vous voulez démarrer lors de la notification. –

+0

Veuillez poster votre manifeste –

Répondre

0

AS @rahul a souligné si vous changez PendingIntent.FLAG_UPDATE_CURRENT pour Intent.FLAG_NEW_ACTIVITY_TASK cela fonctionne comme je requis, mais un problème est que je fonde Si vous avez plusieurs notifications dans la barre de notification, une seule action fonctionnera. Lorsque vous appuyez sur ceux qui restent, il va juste effacer à partir de là, aucune action ne fonctionnera. La solution correcte est la suivante -

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

Appeler 'setFlags()' deux fois comme ceci écrase les drapeaux avec le second appel. Vous vous retrouverez avec seulement le jeu 'FLAG_ACTIVITY_NEW_TASK', ce qui n'est pas ce que vous voulez. Soit 'addFlags()' au lieu de 'setFlags()' ou placez les deux drapeaux dans l'argument 'setFlags()' comme ceci: 'setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK) ' –

0

Au lieu de cela

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

Essayez ceci dans votre intention

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

FLAG_ACTIVITY_SINGLE_TOP Si cette option est activée, l'activité ne sera pas lancé si elle est déjà en cours d'exécution en haut de la pile de l'histoire.

+0

Ne fonctionne pas ... en réglant les indicateurs ci-dessus, l'activité actuellement ouverte est affichée. Ce que je veux, c'est appeler onCréer chaque fois que je tape sur la notification si l'application est en arrière-plan ou en premier plan.l –

+0

Avez-vous ajouté android: exporté = "true" dans votre manifeste android dans l'étiquette d'activité qui est censé être ouvert après avoir tapé notification? – Anurag

3

Juste un travail essayer autour de cette

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

au lieu de

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

A travaillé. Mais Studio show warning dans la ligne 'Doit être sur ou plus de: PendingIntent .......' –

+0

Vous devez passer PendingIntent.FLAG_ONE_SHOT à l'endroit de Intent.FLAG_ACTIVITY_NEW_TASK car ce drapeau d'intention n'est pas recommandé pour la méthode PendingIntent.getActivity . –

+1

Passer 'Intent.FLAG_ACTIVITY _...' à un appel à 'PendingIntent.getActivity()' est incorrect. Cet appel accepte les drapeaux 'PendingIntent', pas les drapeaux' Intent'. –

0

Ajoutez un indicateur pour effacer les tâches existantes et démarrer une nouvelle tâche.

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' est non pertinent et redondant si vous spécifiez 'FLAG_ACTIVITY_CLEAR_TASK' –

0

Si vous souhaitez utiliser Intent.FLAG_ACTIVITY_CLEAR_TASK vous devez également utiliserIntent.FLAG_ACTIVITY_NEW_TASK. Il le dit même dans la documentation.