web-dev-qa-db-fra.com

Méthode d'appel Android en cliquant sur la notification

Ce code crée une notification. Si vous cliquez dessus, l'application en cours est exécutée (l'intention est créée dans Entry, qui est mon seul Activity), version légèrement modifiée d'un blog Android Developers:

private void makeIntent() {
    NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Notification note = new Notification(R.drawable.prev, "Status message!", System.currentTimeMillis());
    Intent intent = new Intent(this, Entry.class);
    PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
    note.setLatestEventInfo(this, "New Email", "Unread Conversation", pi);
    note.flags |= Notification.FLAG_AUTO_CANCEL;
    mgr.notify(NOTIFY_ME_ID, note);
}

Mais je ne veux pas démarrer d'activité, mais simplement exécuter une méthode dans l'activité en cours. D'après ce que j'ai lu jusqu'à présent, je suppose que je dois utiliser des méthodes telles que startActivityForResult(), utiliser intent-filters et implémenter onActivityResult(), mais après avoir bousculé tout cela, modifié les éléments dans Intent et PendingIntent, je n'ai toujours aucun résultat utilisable. Est-il possible d'appeler simplement une méthode dans Entry (mon Activity principal, dans lequel le Intent est créé), ou d'attraper un Intents sortant ou entrant lorsque je clique sur mon Notification nouvellement créé?

PS Toutes mes excuses s'il s'agit d'un fil en double, SO est assez lent en ce moment, je ne peux pas effectuer de recherche correctement.

17
stealthjong

Ajoutez Android:launchMode="singleTop" dans votre activity dans votre fichier manifeste, utilisez la méthode protected void onNewIntent(Intent intent) { ... } et utilisez le code suivant:

private static final int MY_NOTIFICATION_ID = 1;
private NotificationManager notificationManager;
private Notification myNotification;

void notification() {   
    notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    myNotification = new Notification(R.drawable.next, "Notification!", System.currentTimeMillis());
    Context context = getApplicationContext();
    String notificationTitle = "Exercise of Notification!";
    String notificationText = "http://Android-er.blogspot.com/";
    Intent myIntent = new Intent(this, YourActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(YourActivity.this, 0, myIntent, Intent.FILL_IN_ACTION);
    myNotification.flags |= Notification.FLAG_AUTO_CANCEL;
    myNotification.setLatestEventInfo(context, notificationTitle, notificationText, pendingIntent);
    notificationManager.notify(MY_NOTIFICATION_ID, myNotification);
}
13
MC Emperor

Cela a fonctionné à 100% pour moi:

Placez ce code dans une méthode:

Intent intent = new Intent(this, YourClass.class);
    intent.putExtra("NotiClick",true);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

 if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.JELLY_BEAN) {
        Notification Noti;
        Noti = new Notification.Builder(this)
                .setContentTitle("YourTitle")
                .setContentText("YourDescription")
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentIntent(pIntent)
                .setAutoCancel(true).build();

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        notificationManager.notify(0, Noti);
    }

Dans le constructeur onCreate/de votre classe, procédez comme suit:

if (savedInstanceState == null) {
        Bundle extras = getIntent().getExtras();
        if(extras == null) 
        {
            //Cry about not being clicked on
        } 
        else if (extras.getBoolean("NotiClick"))
        {
            //Do your stuff here mate :)
        }

    }
4
Michael Schaller
    Intent intent = new Intent(this, Notificationintent.class);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);



    Notification noti = new Notification.Builder(this)
    .setContentTitle("APP NOTIFICATION")
    .setContentText(messageValue)
    .setSmallIcon(R.drawable.ic_launcher)
     .setStyle(new Notification.BigTextStyle()
     .bigText(messageValue))
    .setContentIntent(pIntent).build();

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// hide the notification after its selected
noti.flags |= Notification.FLAG_AUTO_CANCEL;

notificationManager.notify(0, noti);
0
Vipin Yadav