Je peux trouver un moyen d'envoyer des paramètres à mon activité à partir de ma notification.
J'ai un service qui crée une notification. Lorsque l'utilisateur clique sur la notification, je souhaite ouvrir mon activité principale avec certains paramètres spéciaux. Par exemple, un identifiant d'article, afin que mon activité puisse se charger et présenter une vue de détail d'élément spéciale. Plus précisément, je télécharge un fichier, et lorsque le fichier est téléchargé, je veux que la notification ait l'intention que lorsque vous cliquez dessus, elle ouvre mon activité dans un mode spécial. J'ai essayé d'utiliser putExtra
sur mon intention, mais ne peux pas sembler l'extraire, donc je pense que je le fais 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 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 sont toujours nuls et je ne reçois jamais rien dans mon journal.
Btw ... le onCreate
n'est exécuté que lorsque mon activité démarre, si mon activité est déjà démarrée, je veux également collecter les extras et présenter mon activité en fonction de l'item_id que je reçois.
Des idées?
la source
PendingIntent.getActivity()
avec le drapeauPendingIntent.FLAG_UPDATE_CURRENT
, sinon les mêmes extras seront réutilisés pour chaque notification.PendingIntent.getActivity()
en plus de définirFLAG_ACTIVITY_SINGLE_TOP
surIntent
etFLAG_UPDATE_CURRENT
surPendingIntent
. Voir stackoverflow.com/questions/7370324/…J'ai rencontré le même problème que mon application affiche des notifications de message. Lorsqu'il y a plusieurs notifications et en cliquant sur chaque notification, il affiche ce détail de notification dans une activité de message de vue. J'ai résolu le problème des mêmes paramètres supplémentaires reçus en vue d'intention de message.
Voici le code qui a corrigé cela. Code de création de l'intention de notification.
Code pour afficher l'activité des messages.
la source
Peut-être un peu tard, mais: au lieu de ça:
Utilisez ceci:
la source
Rencontrez le même problème ici. Je le résout en utilisant un code de demande différent, utilise le même identifiant que la notification, lors de la création de PendingIntent. mais je ne sais toujours pas pourquoi cela devrait être fait.
la source
Après avoir lu des listes de diffusion et d'autres forums, j'ai trouvé que l'astuce semble ajouter des données uniques à l'intention.
comme ça:
Je ne comprends pas pourquoi cela doit être fait, cela a quelque chose à voir avec l'intention ne peut être identifié que par ses extras ...
la source
J'ai tout essayé mais rien n'a fonctionné.
a finalement trouvé la solution suivante.
1- dans le manifeste ajouter pour l'activité android: launchMode = "singleTop"
2- tout en faisant l'intention en attente, procédez comme suit, utilisez bundle au lieu d'utiliser directement intention.putString () ou intent.putInt ()
la source
AndroidManifest.xml
Inclure launchMode = "singleTop"
SMSReceiver.java
Définissez les indicateurs pour l'intention et le PendingIntent
MessageDetailsActivity.java
onResume () - est appelé à chaque fois, chargez les extras.
J'espère que cela aide, il était basé sur d'autres réponses ici sur stackoverflow, mais c'est la plus mise à jour qui a fonctionné pour moi.
la source
C'est facile, c'est ma solution en utilisant des objets!
Mon POJO
Notification de méthode
Nouvelle activité
Bonne chance!!
la source
Après avoir fait quelques recherches, j'ai obtenu la solution du guide du développeur Android
Pour obtenir une valeur supplémentaire d'intention dans la classe d'activité de test, vous devez écrire le code suivant:
la source
stackBuilder
?Dans votre implémentation de notification, utilisez un code comme celui-ci:
Pour obtenir des valeurs supplémentaires d'intention dans ExampleActivity, utilisez le code suivant:
NOTE TRÈS IMPORTANTE: la méthode Intent :: putExtra () est une méthode surchargée. Pour obtenir la clé supplémentaire, vous devez utiliser la méthode Intent :: get [Type] Extra () .
Remarque: NOTIFICATION_ID et NOTIFICATION_CHANNEL_ID sont des constantes déclarées dans ExampleActivity
la source
Bonjour, je peux aussi dire que j'ai essayé tout ce qui est mentionné dans ces articles et quelques autres d'ailleurs. Le problème n ° 1 pour moi était que la nouvelle intention avait toujours un paquet nul. Mon problème était de trop me concentrer sur les détails de "ai-je inclus .ce ou .that". Ma solution était de prendre du recul par rapport aux détails et d'examiner la structure globale de la notification. Quand j'ai fait cela, j'ai réussi à placer les éléments clés du code dans la séquence correcte. Donc, si vous rencontrez des problèmes similaires, vérifiez:
// J'aime mieux spécifier le type de données. par exemple bundle.putInt
Avec cette séquence, j'obtiens un bundle valide.
la source
Si tu utilises
dans votre fichier AndroidManifest.xml pour l'activité à lancer, vous devez utiliser ce qui suit dans votre intention:
L'important est de définir des données uniques, par exemple en utilisant un identifiant unique comme:
la source
Veuillez utiliser comme PendingIntent tout en affichant la notification, elle sera résolue.
PendingIntent intention = PendingIntent.getActivity (this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Ajoutez PendingIntent.FLAG_UPDATE_CURRENT comme dernier champ.
la source