2010-03-29 5 views
2

Je crée une notification avec quelque chose de semblable à ce qui suit:PendingIntent de notification et historique des applications en conflit

Intent ni = new Intent(this, SomeActivity.class); 
    ni.putExtra("somestring", "somedata"); 
    PendingIntent contentIntent = 
     PendingIntent.getActivity(this, 0, ni, 
       PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_ONE_SHOT); 
    Context context = getApplicationContext(); 

    notification.setLatestEventInfo(context, 
      res.getString(R.string.app_name), 
      text, contentIntent); 

La clé est ici les données supplémentaires sur l'intention de la notification. Une fois que je clique sur la notification et qu'elle affiche SomeActivity, elle affiche l'activité et les données supplémentaires sont disponibles.

Toutefois, si je quitte l'application, maintenez le bouton principal jusqu'à ce que la liste des activités récentes s'affiche, et choisissez d'ouvrir à nouveau l'application, les données supplémentaires sont toujours transmises. Y at-il un moyen que je peux faire passer ces données seulement si l'application est ouverte via la notification, et non de la liste des activités récentes?

Répondre

2

On dirait que je peux vérifier si l'activité a été lancée à partir des activités récentes de dialogue avec ceci:

if((getIntent().getFlags() & 
     Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) { 
    // ignore extras 
} 
else { 
    // do not ignore extras 
} 

Je ne sais pas si cela est la meilleure façon, mais il fonctionne.

1

Utilisez un autre Intent. Par exemple, vous pouvez ajouter un <intent-filter> pour une chaîne d'action personnalisée et l'utiliser pour votre NotificationPendingIntent. En d'autres termes, vous ne pouvez pas modifier la boîte de dialogue des activités les plus récentes, mais vous pouvez changer votre côté du conflit.

+0

Maintenant, la boîte de dialogue des activités récentes affiche simplement le nouveau PendingIntent ... ce qui signifie que j'ai le même problème - la boîte de dialogue des activités récentes lance toujours la même activité avec les mêmes données supplémentaires. – synic

+0

Cela ne devrait se produire que si l'activité en question a été démarrée à partir de la «Notification». – CommonsWare

+0

Je suppose que je ne comprends pas. Même si je commence une activité entièrement différente, et que je lance ensuite mon activité principale, je devrais toujours utiliser des extras pour la logique, et ils sont toujours passés à la nouvelle activité. J'ai essayé de faire ce "LauncherActivity" excludeFromRecents, mais cela a juste fait que toute l'application soit exclue, même si l'activité principale est spécifiée pour ne pas être exclue dans le manifeste. – synic

1

Essayez avec:

int NOTIFICATION_CODE = 1; 

PendingIntent contentIntent = 
      PendingIntent.getActivity(this, 
            NOTIFICATION_CODE, 
            ni, 
            PendingIntent.FLAG_UPDATE_CURRENT | 
            PendingIntent.FLAG_ONE_SHOT 
            ); 

Modifier la valeur notification_code pour chaque notification.