使用remoteInput取消通知不起作用

时间:2019-01-16 15:04:49

标签: android android-notifications remote-input

我正在用RemoteInput显示通知,如下所示:

   RemoteInput remoteInput = new RemoteInput.Builder("key_add_note")
                .setLabel("add note")
                .build();


        PendingIntent AddNotePendingIntent =
                PendingIntent.getBroadcast(getApplicationContext(),
                        (int) txn.get_id(),
                        new Intent(getApplicationContext(), AddNoteBroadcastReceiver.class)
                                .putExtra(Constants.IntentExtras.STA_TXN_ID, txn.get_id()),
                        PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Action action =
                new NotificationCompat.Action.Builder(R.drawable.ic_action_edit_dark,
                        "add note", AddNotePendingIntent)
                        .addRemoteInput(remoteInput)
                        .build();


        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NotificationUtil.MISC_CHANNEL_ID)
                .setContentTitle("TEST")
                .setContentText("add Note")
                .setSmallIcon(R.drawable.ic_action_edit_dark)
                .setAutoCancel(true)
                .addAction(action);

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

        notificationManager.notify(123456, builder.build());

输出:

notification

点击添加便笺,输入文字并提交后,我尝试取消这样的通知:

notificationManager.cancel(123456);

这不会取消通知,只是取消输入字段,并在我的通知下方添加如下文字:

enter image description here

为什么这不能取消通知?以及如何取消它。

更新:即使有带有通知的标签

,结果也一样

3 个答案:

答案 0 :(得分:0)

尝试在通知中设置标签,然后在执行以下取消操作时提供该标签:

创建时(将my_tag替换为您喜欢的唯一标签):

notificationManager.notify("my_tag",123456, builder.build());

取消时:

notificationManager.cancel("my_tag",123456);

答案 1 :(得分:0)

过了一会儿,我找到了解决方法,绝对不是最优雅的解决方案。我在Android 9上遇到了问题,而系统无法取消带有远程输入的通知。解决方法是,在用户输入文本并单击之后,我们需要update the notification UI才能使用setTimeoutAfter();即使值低至1毫秒,通知也会在几秒钟后删除,因此解决方案也不是最好的。

fun updateNotification(context: Context, id: Int) {
    val notification = NotificationCompat.Builder(context, MY_CHANNEL_ID)
        .setSmallIcon(android.R.drawable.ic_action_edit_dark)
        .setContentText(MY_TEXT)
        .setTimeoutAfter(1)
        .build()

    // show notification. This hides direct reply UI
    NotificationManagerCompat.from(context).notify(id, notification)
}

答案 2 :(得分:0)

当我创建一个有机会在其内部进行应答的通知时(例如与RemoteInput一起在example中使用),并且想在以后与其他通知一起请勿替换答案:

notificationManager.notify(tag, requestCode, notification);

但只是在答案之后立即取消即可

notificationManager.cancel(tag, requestCode);

它不会从通知面板中消失。

更多有关当我尝试在上述取消后使用的现有通知列表的信息

StatusBarNotification[] barNotifications = notificationManager.getActiveNotifications();

此通知(仍未从通知面板中消失)通知缺席已插入列表!

bug仅从API 29开始出现,并不取决于我是从通知面板还是从“提示”通知中进行回答。

作为解决方法,我必须将manual中的已答复通知替换为RemoteInput

notificationManager.notify(tag, requestCode, notification);

等待几秒钟

Thread.sleep(2000) 

并在之后取消

notificationManager.cancel(tag, requestCode);