简体   繁体   中英

Cancel notification not working

I want to cancel/delete the notification after I click the addAction.

However it's not working. The notification is still there after the click. I'm pretty sure this worked in an other project.

Can anyone see a stupid error I made, why its not working?

Actual code:

    public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent arg1) {

    showNotification(context);

}

private void showNotification(Context context){


    String onderwerp = ("Medicatietijd");
    String name = ("Het is tijd om je medicitie in te nemen.");

    // Geluid notificatie
    Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    // Notificatie trigger
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            new Intent(context, Test.class), 0);

    // De notificatie
    Notification mNotification = new Notification.Builder(context)

        .setContentTitle(onderwerp)
        .setContentText(name)
        .setSmallIcon(R.drawable.ninja)
        .setSound(soundUri)
        .addAction(R.drawable.ja, "Ja, ik heb ze ingenomen.", contentIntent)
        .setAutoCancel(true)

        .build();

    NotificationManager notificationManager 
       = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

    mNotification.vibrate = new long[]{100, 200, 100, 500}; 
    mNotification.flags |= Notification.FLAG_AUTO_CANCEL;       

    notificationManager.notify(0, mNotification);

}

Solution: In test activity OnCreate added this:

   NotificationManager notificationManager 
       = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.cancel(0);

If you decided to use Test activity to receive the intent of your addAction call, then you must cancel notification when you receive the intent in the activity.

I also recommend that you add requestCode for the intent.

Here is the code :

to set the requestCode modify this :

static final int REQ_CODE = 101; // some number
// Notificatie trigger
PendingIntent contentIntent = PendingIntent.getActivity(context, REQ_CODE,
    new Intent(context, Test.class), 0);

to Handle intent in activity and dismiss the notification, in Test activity class :

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    if (requestCode == REQ_CODE) {
        // dismiss notification
        notificationManager.cancel(0);

        // handle your action
        // ...
    }
}

Hope that helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM