2013-08-20 37 views
7

我在通知中添加了两个操作按钮,当我点击其中的任意一个时,他们执行所需的操作,但通知仍保留在通知抽屉中。我知道当点击操作按钮时,可以从通知抽屉中删除通知,因为这是Gmail的功能。如果我点击主要通知,它会打开应用程序并从通知抽屉中删除通知。当addAction被调用时移除通知?

这里是我的代码片段:

Intent completeIntent = new Intent(getApplicationContext(), MarkComplete.class); 
     completeIntent.putExtra("rowid", inrowid); 
     completeIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

PendingIntent markCompleteIntent = PendingIntent.getActivity(getApplicationContext(), inrow, completeIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

builder.setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle("Title") 
       .setContentText("text") 
       .setContentIntent(notificationReleaseIntent) 
       .setPriority(Notification.PRIORITY_HIGH) 
       .setAutoCancel(true) 
       .addAction(R.drawable.complete, "Mark Complete", markCompleteIntent); 

编辑 - 作为zionpi指出我需要调用notification.cancel();一旦addAction按钮被点击,删除通知。我只是将此方法添加到PendingIntent指向的类中。

public static void CancelNotification(Context ctx, int notifyId) { 
    String s = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNM = (NotificationManager) ctx.getSystemService(s); 
    mNM.cancel(notifyId); 
} 
+0

代码不完整。通知仍然存在? – Nizam

+0

IMO Gmail使用服务来保存对通知对象的引用,因此它可以在匹配某些条件时删除通知。 –

回答

4

所以你想删除你的通知,初步是有一个通知ID。
然后调用类似于下面的方法来消除它。

public static void CancelNotification(Context ctx, int notifyId) { 
     String s = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNM = (NotificationManager) ctx.getSystemService(s); 
     mNM.cancel(notifyId); 
    } 

您可能希望参考thisthis后交替。

+0

zionpi,谢谢你的工作完美! – marty331

+0

假设我的addAction打开了MainActivity intent,那么如果我在MainActivity的开始时调用这个'mNM.cancel(notifyId);',即使我没有点击或检查通知,我也会在打开MainActivity时取消通知。所以什么时候应该调用它,以便在点击addAction按钮后才能调用它。 @zionpi – Sp4Rx

+0

通知在下列情况之一发生之前​​保持可见状态,请参阅[this](https://developer.android.com/training/notify-user/managing.html#Removing)。 @ Sp4Rx – zionpi

相关问题