Aller au contenu

Revenir à une activity depuis les notifications


gedeon555

Recommended Posts

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.

Lien vers le commentaire
Partager sur d’autres sites

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é par Tama Chan
Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

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é par emulienfou
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 4 years later...

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?

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...