调用notification.cancel后,通知不会被取消

时间:2015-11-24 05:45:32

标签: android

我使用操作按钮创建通知。单击动作按钮时,将调用广播接收器。我在意图

中传递通知ID

在广播接收器中,我执行以下操作

 int notifId = intent.getIntExtra(Constants.NOTIF_ID, 0);
           NotificationManager mNotificationManager =(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);  
           mNotificationManager.cancel(notifId);

这就是我生成通知的方式

int notifId = Util.random.nextInt(9000);
    Intent mIntent = new Intent(con, NotificationBroadcastReceiver.class);
            mIntent.putExtra(Constants.NOTIF_CODE, codeReason);
            mIntent.putExtra(Constants.NOTIF_ID, notifId);
            PendingIntent mPendingIntent = PendingIntent.getBroadcast(con, 0, mIntent , 0);

            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(con)
                    .setSmallIcon(R.drawable.icon)
                    .setContentTitle("test")
                    .setPriority(Notification.PRIORITY_MAX)
                    .setAutoCancel(true)
                    .addAction(R.drawable.ic_launcher, "action", mPendingIntent);



            // Creates an explicit intent for an Activity in your app
            Intent resultIntent = new Intent(con, MainActivity.class);

            PendingIntent resultPendingIntent =
                    PendingIntent.getActivity(con, 0, resultIntent,  PendingIntent.FLAG_UPDATE_CURRENT);

            mBuilder.setContentIntent(resultPendingIntent);
            NotificationManager mNotificationManager =(NotificationManager) con.getSystemService(Context.NOTIFICATION_SERVICE);
            mBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS);

            // mId allows you to update the notification later on.
            mNotificationManager.notify(notifId, mBuilder.build());

然而,虽然我知道我正在使用代码(使用日志语句),但通知不会被隐藏/解散。

为什么?

2 个答案:

答案 0 :(得分:1)

  1. 检查您的ID是否为零。
  2. 通过startForground()检查通知未与其他服务绑定。

答案 1 :(得分:1)

我找到了答案。我“认为”由于2个待定意图具有相同的con和req代码,它们最终会修改它们的意图值。我通过使用2个不同的请求代码来修复它,以确保唯一的Pending Intents。因此,我得到了相同的通知