catch on swipe to dismiss event catch on swipe to dismiss event android android

catch on swipe to dismiss event


DeleteIntent:DeleteIntent is a PendingIntent object that can be associated with a notification and gets fired when the notification gets deleted, ether by :

  • User specific action
  • User Delete all the notifications.

You can set the Pending Intent to a broadcast Receiver and then perform any action you want.

  Intent intent = new Intent(this, MyBroadcastReceiver.class);  PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent, 0);  Builder builder = new Notification.Builder(this): ..... code for your notification  builder.setDeleteIntent(pendingIntent);

MyBroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver {      @Override      public void onReceive(Context context, Intent intent) {             .... code to handle cancel         }  }


A fully flushed out answer (with thanks to Mr. Me for the answer):

1) Create a receiver to handle the swipe-to-dismiss event:

public class NotificationDismissedReceiver extends BroadcastReceiver {  @Override  public void onReceive(Context context, Intent intent) {      int notificationId = intent.getExtras().getInt("com.my.app.notificationId");      /* Your code to handle the event here */  }}

2) Add an entry to your manifest:

<receiver    android:name="com.my.app.receiver.NotificationDismissedReceiver"    android:exported="false" ></receiver>

3) Create the pending intent using a unique id for the pending intent (the notification id is used here) as without this the same extras will be reused for each dismissal event:

private PendingIntent createOnDismissedIntent(Context context, int notificationId) {    Intent intent = new Intent(context, NotificationDismissedReceiver.class);    intent.putExtra("com.my.app.notificationId", notificationId);    PendingIntent pendingIntent =           PendingIntent.getBroadcast(context.getApplicationContext(),                                       notificationId, intent, 0);    return pendingIntent;}

4) Build your notification:

Notification notification = new NotificationCompat.Builder(context)              .setContentTitle("My App")              .setContentText("hello world")              .setWhen(notificationTime)              .setDeleteIntent(createOnDismissedIntent(context, notificationId))              .build();NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);notificationManager.notify(notificationId, notification);


Another Idea:

if you create a notification normally you also need the actions one, two or 3 of them. I've created a "NotifyManager" it creates all notifications i need and also receive all Intent calls. So i can manage all the actions AND also the catch the dismiss event at ONE place.

public class NotifyPerformService extends IntentService {@Inject NotificationManager notificationManager;public NotifyPerformService() {    super("NotifyService");    ...//some Dagger stuff}@Overridepublic void onHandleIntent(Intent intent) {    notificationManager.performNotifyCall(intent);}

to create the deleteIntent use this (in the NotificationManager):

private PendingIntent createOnDismissedIntent(Context context) {    Intent          intent          = new Intent(context, NotifyPerformMailService.class).setAction("ACTION_NOTIFY_DELETED");    PendingIntent   pendingIntent   = PendingIntent.getService(context, SOME_NOTIFY_DELETED_ID, intent, 0);    return pendingIntent;}

and THAT i use to set the delete Intent like this (in the NotificationManager):

private NotificationCompat.Builder setNotificationStandardValues(Context context, long when){    String                          subText = "some string";    NotificationCompat.Builder      builder = new NotificationCompat.Builder(context.getApplicationContext());    builder            .setLights(ContextUtils.getResourceColor(R.color.primary) , 1800, 3500) //Set the argb value that you would like the LED on the device to blink, as well as the rate            .setAutoCancel(true)                                                    //Setting this flag will make it so the notification is automatically canceled when the user clicks it in the panel.            .setWhen(when)                                                          //Set the time that the event occurred. Notifications in the panel are sorted by this time.            .setVibrate(new long[]{1000, 1000})                                     //Set the vibration pattern to use.            .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))            .setSmallIcon(R.drawable.ic_white_24dp)            .setGroup(NOTIFY_GROUP)            .setContentInfo(subText)            .setDeleteIntent(createOnDismissedIntent(context))    ;    return builder;}

and finally in the same NotificationManager is the perform function:

public void performNotifyCall(Intent intent) {    String  action  = intent.getAction();    boolean success = false;    if(action.equals(ACTION_DELETE)) {        success = delete(...);    }    if(action.equals(ACTION_SHOW)) {        success = showDetails(...);    }    if(action.equals("ACTION_NOTIFY_DELETED")) {        success = true;    }    if(success == false){        return;    }    //some cleaning stuff}