点击这些操作按钮时,我想关闭通知操作按钮(而不是整个通知)。 (可以说:带有停止操作按钮的下载通知。单击停止时,关闭停止按钮并将contentText更改为“下载已取消”)
我唯一想到的是取消通知并通知另一个具有相同ID的通知,但这似乎是一个丑陋的解决方法......
那么,有没有办法从通知中删除操作按钮?
(我认为没有必要提供任何代码,但如果有必要的话我会...)
答案 0 :(得分:22)
如果您正在使用v4支持库中的NotificationCompat.Builder,则可以直接访问构建器的动作集合(不幸的是,没有提供公共变更器)。
以下方法可以解决问题(当然你必须更新重新通知):
NotificationCompat.Builder notifBuilder = NotificationCompat.Builder(context);
...
notifBuilder.mActions.clear();
答案 1 :(得分:2)
我遇到了同样的问题并为此找到了解决方案。 我创建了另一个构建器并添加了两个" empty"像这样的行动:
builder.addAction(0, null, null);
builder.addAction(0, null, null);
(每个按钮一个,所以如果你有三个,那就叫它三次)。
然后在调用Notify时,它会删除按钮。
答案 2 :(得分:0)
NotificationCompat.Builder notifBuilder = NotificationCompat.Builder(context);
删除整个操作按钮:
builder.mActions.clear();
用于删除特殊操作按钮:
builder.mActions.remove(index);
最后:
notificationManager.notify(notificationID, builder.build());
答案 3 :(得分:0)
即使接受的答案有效,根据文档,使用NotificationCompat.Extender
类也可以做到这一点。例如在Kotlin中:
private val clearActionsNotificationExtender = NotificationCompat.Extender { builder ->
builder.mActions.clear()
builder
}
private val notificationBuilder by lazy {
NotificationCompat.Builder(context)
.addAction(R.drawable.ic_play_arrow, "Play", playPendingIntent)
}
private fun updateNotification(){
notificationBuilder
.extend(clearActionsNotificationExtender) // this will remove the play action
.addAction(R.drawable.ic_pause, "Pause", pausePendingIntent)
}
答案 4 :(得分:-2)
Android提供了通知区域,用于警告用户已发生的事件。它还提供了一个通知抽屉,用户可以下拉以查看有关通知的更多详细信息。
通知抽屉由
组成要设置通知以便更新,请通过调用NotificationManager.notify(ID,通知)向通知ID发出通知。要在发出通知后更新此通知,请更新或创建NotificationCompat.Builder对象,从中构建Notification对象,并使用您之前使用的相同ID发出通知。
mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Sets an ID for the notification, so it can be updated
int notifyID = 1;
mNotifyBuilder = new NotificationCompat.Builder(this)
.setContentTitle("New Message")
.setContentText("You are downloading some image.")
.setSmallIcon(R.drawable.ic_stop)
numMessages = 0;
// Start of a loop that processes data and then notifies the user
...
mNotifyBuilder.setContentText("Download canceled")
.setNumber(++numMessages);
// Because the ID remains unchanged, the existing notification is
// updated.
mNotificationManager.notify(
notifyID,
mNotifyBuilder.build());
...