关闭单击Action的当前通知

时间:2016-02-06 02:02:34

标签: java android push-notification

我有一个带有操作按钮的自定义通知:

    // init okhttp 3 logger
    HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
        @Override public void log(String message) {
            Log.d("MyTAG", "OkHttp: " + message);
        }
    });
    logging.setLevel(HttpLoggingInterceptor.Level.BODY);
public class NotificationReceiver extends com.parse.ParsePushBroadcastReceiver {
    @Override
    public void onPushReceive(Context context, Intent intent) {

    ...

    NotificationActivity notification = new NotificationActivity();
    notification.createNotification(context, message, notificationId);

    Log.i("tag", "Notification Received!");
}

我想取消点击操作按钮的通知"关闭"。

我知道我需要通知的ID来取消它,但是当我点击"关闭"按钮并创建类CancelNotification,它扩展BroadCastReceiver我获取最后一个通知的通知ID,因此,即使我点击我创建的第一个通知,也会关闭最后一个通知。

我可能做错了什么?

3 个答案:

答案 0 :(得分:8)

我找到了

您的pendingIntent始终发送请求代码== 0;

由于您有多个通知,每个通知应使用不同的requestCode。

所以,试着改变:

自:

PendingIntent pendingCancelIntent = 
         PendingIntent.getBroadcast(context, 0, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT) ;

要:

PendingIntent pendingCancelIntent = 
         PendingIntent.getBroadcast(context, this.notificationId, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT) ;

我在这里测试了你的代码,并且在我改变之后它正在运行。

答案 1 :(得分:1)

使用“通知”构建器总是更好。 下面是一个例子:

    NotificationCompat.Builder mBuilder=new NotificationCompat.Builder(this);
    mBuilder.setContentTitle("Your title");
    mBuilder.setOnlyAlertOnce(true);
    mBuilder.setAutoCancel(true);
    mBuilder.setContentText("main content")
    mBuilder.setSubText("subtext")

接下来,您将创建一个意图,在点击通知时要打开哪个活动

    intent = new Intent(this, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

然后创建通知管理器

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

    Notification notification = mBuilder.build();
    notification.flags = Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(notificationID, notification);

notificationID可以是任何整数值。使用此类型为您提供了始终遵循通知的android规范的优势。

答案 2 :(得分:0)

触发意图删除通知后,您将需要运行以下代码。

NotificationManagerCompat.from(this).cancel(null, notificationId);

https://stackoverflow.com/a/61483371/7308789