182 votes

Comment faire pour envoyer des paramètres d’un clic de notification d’une activité ?

Je peux trouver un moyen pour envoyer des paramètres à mon activité de mon avis.

J'ai un service qui crée une notification. Lorsque l'utilisateur clique sur la notification que je veux ouvrir mon activité principale avec certains paramètres spéciaux. E. g un élément d'id, donc mon activité de chargement et de présenter un article spécial de la vue de détail. Plus spesific, im le téléchargement d'un fichier, et lorsque le fichier est téléchargé, je veux la notification d'avoir une intention que lorsque l'utilisateur clique dessus il s'ouvre mon activité dans un mode spécial. J'ai essayé d'utiliser putExtra sur mon intention, mais ne peut pas sembler à extraire, donc je pense que im faire de mal.

Code de mon service qui crée la Notification:

        // construct the Notification object.
     final Notification notif = new Notification(R.drawable.icon, tickerText, System.currentTimeMillis());


	final RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout);
	contentView.setImageViewResource(R.id.image, R.drawable.icon);
	contentView.setTextViewText(R.id.text, tickerText);
	contentView.setProgressBar(R.id.progress,100,0, false);
	notif.contentView = contentView;		

	Intent notificationIntent = new Intent(context, Main.class);
	notificationIntent.putExtra("item_id", "1001"); // <-- HERE I PUT THE EXTRA VALUE
	PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
	notif.contentIntent = contentIntent;

    nm.notify(id, notif);

Code de mon Activité qui tente d'extraire le paramètre supplémentaire à compter de la notification:

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);


    Bundle extras = getIntent().getExtras();
    if(extras != null){
        Log.i( "dd","Extra:" + extras.getString("item_id") );
    }

Les extras est toujours nulle et je n'est jamais rien dans mon journal.

Btw... onCreate n'est exécutée que lorsque mon activité démarre, si mon activité est déjà commencé, je tiens également à recueillir les extras et les présenter mon activité selon la item_id, j'obtiens.

Des idées?

221voto

Lucas S. Points 5703

Jetez un oeil à ce guide (création d'une notification), et les échantillons ApiDemos "StatusBarNotifications" et "NotificationDisplay".

Pour la gestion si l'activité est déjà en cours d'exécution, vous avez deux façons:

  1. Ajouter FLAG_ACTIVITY_SINGLE_TOP drapeau à l'Intention lors du lancement de l'activité, puis dans la classe d'activité mettre en œuvre onNewIntent(Intent intent) gestionnaire d'événements, de cette façon, vous pouvez accéder à la nouvelle de l'intention qui a été appelé à l'activité (ce qui n'est pas le même que tout le qualifiant de getIntent(), ce sera toujours le retour de la première Intention qui a lancé votre activité.

  2. Même en tant que numéro un, mais au lieu d'ajouter un drapeau à l'Intention, vous devez ajouter "singleTop" dans votre activité AndroidManifest.xml.

Si vous utilisez intention extras", n'oubliez pas d'appeler PendingIntent.getActivity() avec le drapeau PendingIntent.FLAG_UPDATE_CURRENT, sinon les mêmes extras seront réutilisés pour chaque notification.

87voto

<p>J’ai eu le même problème mon application affiche les notifications de message. Quand il y a plusieurs notifications et en cliquant sur chaque notification affiche ce détail de la notification à une activité de message de vue. J’ai résolu le problème des mêmes paramètres supplémentaires est reçu dans l’intention de voir message.<p>Voici le code qui a corrigé cela. Code permettant de créer la notification d’intention.</p><pre><code></code></pre><p>Code pour afficher Message d’activité.</p><pre><code></code></pre></p>

24voto

pinaise Points 161
<p>Peut-être un peu en retard, mais : au lieu de cela :<pre><code></code></pre><p>Utiliser ceci :</p><pre><code></code></pre></p>

18voto

jamchen Points 71
<p>Rencontrez le même problème ici. J’ai le résoudre en utilisant le code demande différente, utilisent le même id de notification, tout en créant des PendingIntent. mais ne sais toujours pas pourquoi cela devrait être fait.<pre><code></code></pre></p>

13voto

Vidar Vestnes Points 14317
<p>Après avoir lu quelques listes de courriel et d’autres forums j’ai trouvé que le truc semble ajouter som données uniques à l’intention.<p>Comme ça :</p><pre><code></code></pre><p>Je ne comprends pas pourquoi cela doit être fait, il a obtenu quelque chose à voir avec l’intention ne peut être identifiée que par ses options...</p></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: