gedeon555 Posté(e) 28 novembre 2009 Share Posté(e) 28 novembre 2009 Bonjour, Je stoque un id d'instance dans mon activity qui balance une notification. J'aimerais que lorsque l'utilisateur clique sur la notification, il retourne dans l'activity et que l'id soit conservé. Voici un bout de code pour comprendre : public class MyActivity extends Activity { private long intentId = 0; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("TEST", String.valueOf(intentId)); if (intentId == 0) { intentId = System.currentTimeMillis(); setContentView(R.layout.My); ....... } } public void createNotification() { NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification( R.drawable.icon, "Notification", System.currentTimeMillis()); notification.setLatestEventInfo(this, "Notification", "test", PendingIntent .getActivity(this, 0, getIntent(), PendingIntent.FLAG_UPDATE_CURRENT)); mNotificationManager.notify((int) intentId, notification); } } Le comportement que j'obtiens avec ca est que dans mes logs, l'intentId vaut toujours 0 au moment ou je l'affiche. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tama Chan Posté(e) 28 novembre 2009 Share Posté(e) 28 novembre 2009 (modifié) Tiens, prend ma fonction: public static void showNotification(String title, String text, String ticker, Context context, int number) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); int icon = R.drawable.notification; CharSequence tickerText = ticker; long when = System.currentTimeMillis(); Notification notification = new Notification(icon, tickerText, when); //notification.flags |= Notification.FLAG_ONGOING_EVENT; //notification.number = temp; notification.number = number; //Context context = getApplicationContext(); CharSequence contentTitle = title; CharSequence contentText = text; Intent notificationIntent = new Intent(context, TouiteurMain.class); notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); final int T_ID = 999; notificationManager.notify(T_ID, notification); } T'auras juste a remplacer "TouiteurMain.class" par la classe que tu veux qu'il lance (la classe de ton activity) Edit: j'avais pas vu que tu voulais renvoyer une info. T'as juste a rajouter une info a l'intent notificationIntent Style notificationIntent.putExtra("Nom", "Toto"); et dans ton onCreate de ton Activity tu recuperes cette info avec getIntent().getExtras().getString("Nom"); Ca marche avec les long et les int sans problemes, suffit de faire getLong ou getInt Modifié 28 novembre 2009 par Tama Chan Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 28 novembre 2009 Share Posté(e) 28 novembre 2009 crée la pendingIntent manuellement a partir d une intent. tu peux passer des paramètres a cette intent. et les paramètres sont lisibles dans le oncreate. cherche sur le forum avec activity paramètres. -- Posté depuis BBFoC HTC Magic/sapphire Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gedeon555 Posté(e) 29 novembre 2009 Auteur Share Posté(e) 29 novembre 2009 merci mais avec cette méthode je ne peux pas récupérer le thread que j'ai démarré dans ma précédente instance Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 29 novembre 2009 Share Posté(e) 29 novembre 2009 s'essaye de la declarer en singleinstance dans le manifeste. mais c pas trop la philisophie .... -- Posté depuis BBFoC HTC Magic/sapphire Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
emulienfou Posté(e) 31 mars 2011 Share Posté(e) 31 mars 2011 (modifié) J'ai la même erreur et j'ai aussi une méthode permettant la création de ma notification. j'ai aussi utilisé ton code mais quand je click sur ma notification, cela relance une autre instance de mon application. Voici mon code source : public void triggerNotification(boolean create, String notification_title, String chan_title, String chan_song) { if (create == true) { int icon = R.drawable.icon; // icon from resources CharSequence tickerText = notification_title; // ticker-text long when = System.currentTimeMillis(); // notification time Context context = theContext.getApplicationContext(); // application Context CharSequence contentTitle = chan_title; // expanded message title CharSequence contentText = chan_song; // expanded message text Intent notificationIntent = new Intent(theContext, PulsDroid.class); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(theContext, 0, notificationIntent, 0); // the next two lines initialize the Notification, using the configurations above Notification notification = new Notification(icon, tickerText, when); notification.setLatestEventInfo(context, contentTitle, contentText, pendingIntent); notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notification.flags |= Notification.FLAG_NO_CLEAR; notification.flags |= Notification.FLAG_ONGOING_EVENT; notificationManager.notify(NOTIFICATION_ID, notification); } else { notificationManager.cancel(NOTIFICATION_ID); } } Modifié 31 mars 2011 par emulienfou Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 31 mars 2011 Share Posté(e) 31 mars 2011 Je pense qu'il ne faut pas que tu mettes le flag FLAG_ACTIVITY_NEW_TASK, si tu veux réutiliser une Activity déjà existante notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
emulienfou Posté(e) 31 mars 2011 Share Posté(e) 31 mars 2011 Merci pour ton aide, cela ne fonctionne toujours pas mais j'ai remarqué que si j’appuie sur la touche "Accueil" de mon téléphone, et que je clic sur ma notification, cela fonctionne mais si je clic sur le bouton "Retour" alors cela lancera une nouvelle activité !! J'ai aussi le message suivant dans mon LogCat : WARN/ActivityManager(174): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 1 avril 2011 Share Posté(e) 1 avril 2011 Bon, ben, visiblement, il ne faut pas enlever FLAG_ACTIVITY_NEW_TASK, j'ai dit une carabistouille Donc, si je résume: appui sur Home, puis sélection de la notification=> ça marche : c'est normal ! appui sur Retour, puis sélection de la notification => nouvelle instance de ton Activity : c'est normal aussi, vu que le bouton retour a pour effet de fermer l'Activity Donc, il n'y avait de problèmes à l'origine ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gedeon555 Posté(e) 3 avril 2011 Auteur Share Posté(e) 3 avril 2011 Merci à tous pour vos réponses :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
David Montfort Posté(e) 31 mars 2016 Share Posté(e) 31 mars 2016 Bonjour, Mon sujet est le même mais j'ai des soucis avec setLatestEventInfo qui n'est pas reconnu. Je suis tout novice en dev android et je cherche pas mal mes marques.. Pour l'instant mon programme est simple (histoire de me familiariser avec l'environnement) j'ai une classe Notifications: package sousdev.notifications; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.TaskStackBuilder; import android.content.Context; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import java.text.SimpleDateFormat; import java.util.Date; public class Notifications extends AppCompatActivity { @[member=override] protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView text = new TextView(this); long yourmilliseconds = System.currentTimeMillis(); SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm"); Date resultdate = new Date(yourmilliseconds); text.setText(sdf.format(resultdate)); setContentView(text); createNotification("titre", "Message"); //showNotification("titre", "Message", "Ticker",this,0); } private void createNotification(String titre,String message){ NotificationManager mNotification = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Intent launchNotifiactionIntent = new Intent(this, InfoNotif.class); PendingIntent pendingIntent = PendingIntent.getActivity(this,0, launchNotifiactionIntent,PendingIntent.FLAG_ONE_SHOT); Notification.Builder builder = new Notification.Builder(this) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.drawable.icone) .setContentTitle(titre) .setContentText(message) .setContentIntent(pendingIntent); mNotification.notify(0, builder.build()); } } Celle-ci se charge au démarrage et crée une notification. Et je cherche a faire en sorte que lorsqu'on clique sur cette notif, que la seconde classe : InfoNotif s'ouvre: package sousdev.notifications; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.graphics.Color; import android.graphics.PorterDuff; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /** * Created by david on 31/03/2016. */ public class InfoNotif extends AppCompatActivity { @[member=override] protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); CreateButton("Test"); } private void CreateButton(String message) { Button b=new Button(this); b.setText(message); setContentView(b); } } Mon soucis est que l'application se lance bien, la notification se crée bien mais lorsque je clique dessus.. bah rien ne se passe. Auriez vous une idée? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.