【问题标题】:How to dismiss notification on action click?如何关闭动作点击通知?
【发布时间】:2017-06-30 11:27:58
【问题描述】:

当点击通知中的关闭时,我想关闭我的通知。就像我们在滑动时关闭它一样。

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

    Intent intent = new Intent(ctx, MainActivity.class);
    intent.putExtra("isFromBadge", false);

    Intent resultIntent = new Intent(ctx, ResultActivity.class);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(ctx);
    stackBuilder.addParentStack(ResultActivity.class);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_ONE_SHOT);

    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, resultIntent, PendingIntent.FLAG_CANCEL_CURRENT);

  //  PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    Notification notification = new Notification.Builder(ctx)
            .setContentTitle(
                    ctx.getResources().getString(R.string.app_name))
            .setContentText(message)
            .setWhen(when)
            .setStyle(new Notification.BigPictureStyle().bigPicture(result))
            .setSmallIcon(R.mipmap.ic_launcher)
            .addAction(R.drawable.bell, "Dismiss", resultPendingIntent)
            .addAction(R.drawable.bell, "Share", contentIntent)
            .setLargeIcon(result)
            .setAutoCancel(true)
            .build();

【问题讨论】:

    标签: android


    【解决方案1】:

    这样试试

    public void showNotification(Context ctx) {
        int noti_id = 100;
        NotificationManager notificationManager = (NotificationManager) ctx
                    .getSystemService(Context.NOTIFICATION_SERVICE);
    
        Intent actionIntent = new Intent(ctx, ActionReceiver.class);
        actionIntent.putExtra("noti_id", noti_id);
    
        PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, noti_id, actionIntent, 
            PendingIntent.FLAG_CANCEL_CURRENT);
    
        Notification notification = new Notification.Builder(ctx)
                                    .setContentTitle("hello")
                                    .setContentText("Hello")
                                    .addAction(R.drawable.bell, "dismiss", pendingIntent)
                                    .setAutoCancel(false)
                                    .build();
    
    
        notificationManager.notify(noti_id, notification);   
    }
    
    
    
    public class ActionReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent != null) {
                int noti_id = intent.getIntExtra("noti_id", -1);
    
                if (noti_id > 0) {
                    NotificationManager notificationManager = (NotificationManager) context
                    .getSystemService(Context.NOTIFICATION_SERVICE);
    
                    notificationManager.cancel(noti_id);
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以在使用NotificationManager 创建通知时使用您提供的notification_id 取消通知

      通知 -

      mNotificationManager.notify(_notificationId /* ID of notification */, mBuilder.build());
      

      取消通知 -

      mNotificationManager.cancel(_notificationId);
      

      【讨论】:

      • 我只想在用户点击关闭按钮时取消。
      • 关闭按钮在哪里?获取点击事件并在那边拨打cancel
      • 那么setAutoCancel(true)的目的是什么?
      【解决方案3】:

      我有同样的错误。最后我得到了问题的解决方案,因为当你有多个 PendingIntent 时,你编写的请求代码是相同的。它使一个 PendingIntent 工作,但其他人不起作用,并且点击未使用。 在我的情况下,只需使请求代码不同,问题就解决了。

      【讨论】:

        猜你喜欢
        • 2016-05-16
        • 1970-01-01
        • 2012-08-06
        • 2014-02-25
        • 1970-01-01
        • 1970-01-01
        • 2019-04-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多