java - 关闭当前点击操作的通知

标签 java android push-notification

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

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!");
}

public class NotificationActivity {

    public int notificationId;

    public void createNotification(Context context, String message, String studentId, String notificationId){
         this.notificationId = Integer.parseInt(notificationId);

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

         // notification
         Notification.Builder mBuilder = new Notification.Builder(context);
         mBuilder.setContentTitle("My Title");
         mBuilder.setContentText(message);
         mBuilder.setDefaults(Notification.DEFAULT_VIBRATE);
         mBuilder.setAutoCancel(true);
         mBuilder.setStyle(new Notification.BigTextStyle()
             .bigText(message));

         // cancel intent
         Intent cancelIntent = new Intent(context, CancelNotification.class);
         Bundle extras = new Bundle();
         extras.putInt("notification_id", this.notificationId);
         cancelIntent.putExtras(extras);
         PendingIntent pendingCancelIntent = 
             PendingIntent.getBroadcast(context, 0, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT) ;
         mBuilder.addAction(R.drawable.notification_close, "Fechar", pendingCancelIntent);

        // notify
        Notification notification = mBuilder.build();
        notificationManager.notify(Integer.parseInt(notificationId), notification);
    }

    public static class CancelNotification extends BroadcastReceiver {

        private int id;

        @Override
        public void onReceive(Context context, Intent intent) {
             id = intent.getIntExtra("notification_id", 1);
             NotificationManager notificationManager =
                  (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
             notificationManager.cancel(id);
        }
    }
}

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

我知道我需要通知的 ID 才能取消它,但是我执行代码的方式是,当我单击“关闭”按钮并创建扩展 BroadCastReceiver 的类 CancelNotification 时,我得到了通知 ID最后一个通知,因此,即使我点击了我创建的第一个通知,也会关闭最后一个通知。

我可能做错了什么?

最佳答案

找到了

你pendingIntent总是发送请求码== 0;

由于您有多个通知,每个通知都应该使用不同的请求代码。

所以,尝试改变:

来自:

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

收件人:

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

我在这里测试了您的代码,在我进行更改后它可以正常工作。

关于java - 关闭当前点击操作的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35236494/

相关文章:

java - 实例化一个类的两个实例

java - Java 中的 0000 年

Android:提取列表中TextView的字符串

android - 通过按钮调用 viewPager.setCurrentItem 时,CreateFragment 调用了两次

android - Google Firebase FirebaseMessaging.onMessage.listen 在 flutter 中多次调用

ionic-framework - 如何检测从 ionic 3 中的推送通知打开的应用程序?

Java Gson http响应解析困难

java - 在 Java 字符串中将 # 替换为\u0023

android - 三星 Lollipop 设备上的奇怪 SQLite 错误

ios - 如何从亚马逊 SNS 主题取消订阅 iOS 设备?