web-dev-qa-db-fra.com

Comment configurer l'écouteur de clics pour la notification?

J'utilise le code suivant pour lancer une notification lorsqu'un service est démarré via AlarmManager:

nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence from = "App";
CharSequence message = "Getting Latest Info...";
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(), 0);
Notification notif = new Notification(R.drawable.icon,
    "Getting Latest Info...", System.currentTimeMillis());
notif.setLatestEventInfo(this, from, message, contentIntent);
nm.notify(1, notif);

Comment définir une intention pour cet élément afin que lorsque l'utilisateur clique dessus, il lance une certaine activité?

21
yoshi24

Vous devez essentiellement mettre la classe Activity dans le cadre de votre intention dans votre PendingIntent. Votre intention est actuellement vide. Pour rediriger vers une nouvelle activité, il faut:

// This line of yours should contain the activity that you want to launch. 
// You are currently just passing empty new Intent()
PendingIntent contentIntent = 
    PendingIntent.getActivity(this, 0, new Intent(this, MyActivity.class), 0);
19
momo

Quant au commentaire de yoshi24, vous pourrez peut-être définir des extras comme celui-ci.

final Intent intent = new Intent(this, MyActivity.class);
intent.setData(data);
intent.putExtra("key", "value");
final PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

Vous devez également en être conscient avant de vous lancer dans des intentions en attente.

https://stackoverflow.com/questions/1198558/how-to-send-parameters-from-a-notification-click-to-an-activity

[~ # ~] mise à jour [~ # ~] quelque chose comme ça fonctionnera pour vous

dans votre mainfest

<activity Android:name=".MyActivity" Android:launchMode="singleTop" ... />

dans votre activité

@Override
protected void onCreate(Bundle savedInstanceState) {
    processIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {     
    processIntent(intent);
};

private void processIntent(Intent intent){
    //get your extras
}
28
Samuel

Je l'ai fait,

  • J'ajoute Intent.FLAG_ACTIVITY_CLEAR_TOP à une nouvelle intention

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Notification notification = new Notification(R.drawable.ic_launcher,
            "A new notification", System.currentTimeMillis());
    // Hide the notification after its selected
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    
    Intent intent = new Intent(this, NoficationDemoActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    Bundle bundle = new Bundle();
    bundle.putString("buzz", "buzz");
    intent.putExtras(bundle);
    PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0);
    notification.setLatestEventInfo(this, "This is the title",
            "This is the text", activity);
    notification.number += 1;
    notificationManager.notify(0, notification);
    
  • Je crée comme suit:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    if(getIntent().getExtras()!=null){
        Toast.makeText(this, "Click", Toast.LENGTH_SHORT).show();
    }
    
9
Tai Tran