gpt4 book ai didi

android - 更新通知文本,而不是整个通知

转载 作者:IT王子 更新时间:2023-10-28 23:51:37 24 4
gpt4 key购买 nike

前奏

我正在尝试在通知上添加计时器。计时器是一项服务。每秒调用此行(继续 Thread 是“运行” bool 值,timeString 是显示时间的详细字符串):

NotificationChrono.updateNotification(getApplicationContext(), continueThread, 
NOTIF_ID, timeString, "Chronometer", notificationManager);

这是 NotificationChrono 类:

public class NotificationChrono {

static public void updateNotification(Context context, boolean running,
int id, String title, String text,
NotificationManager notificationManager) {

Intent stopIntent = new Intent("com.corsalini.david.barcalc.STOP");
PendingIntent stopPendingIntent = PendingIntent.getBroadcast(context,
0, stopIntent, 0);

Intent startIntent = new Intent(
"com.corsalini.david.barcalc.STARTPAUSE");
PendingIntent startPendingIntent = PendingIntent.getBroadcast(context,
0, startIntent, 0);

NotificationCompat.Builder builder = new NotificationCompat.Builder(
context)

.setContentText(context.getString(R.string.notif_text))

.setContentTitle(title)

.setSmallIcon(R.drawable.ic_action_alarm_2)

.setAutoCancel(false)

.setOngoing(running)

.setOnlyAlertOnce(true)

.setContentIntent(
PendingIntent.getActivity(context, 10, new Intent(
context, FrontActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP), 0))
.addAction(
running ? R.drawable.ic_action_pause
: R.drawable.ic_action_play,
running ? context.getString(R.string.pause) : context
.getString(R.string.start), startPendingIntent)
.addAction(R.drawable.ic_action_stop,
context.getString(R.string.stop), stopPendingIntent);

notificationManager.notify(id, builder.build());
}
}

问题

通知被删除并重新创建的每一秒,从视觉上这意味着通知每秒钟都会消失并重新出现在通知列表中。

我想要的只是更新 TITLE 文本,而不是每秒完全重新创建通知。有可能吗?

最佳答案

确保每次创建 Notification 时使用相同的 NotificationCompat.Builder 构建器!

虽然第一次您必须设置所有内容,但第二次使用 Builder 您只需设置要更新的值。之后它就像你一样调用 notificationManager.notify(id, builder.build()) 。如果您使用相同的 ID,则通知会更新(重要!)。

例子:

//First time
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setContentText(context.getString(R.string.notif_text))
.setContentTitle(title)
.setSmallIcon(R.drawable.ic_action_alarm_2)
.setAutoCancel(false)
.setOngoing(running)
.setOnlyAlertOnce(true)
.setContentIntent(
PendingIntent.getActivity(context, 10,
new Intent(context, FrontActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP),
0)
)
.addAction(running ? R.drawable.ic_action_pause
: R.drawable.ic_action_play,
running ? context.getString(R.string.pause)
: context.getString(R.string.start),
startPendingIntent)
.addAction(R.drawable.ic_action_stop, context.getString(R.string.stop),
stopPendingIntent);

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

//Second time
builder.setContentTitle(title);
notificationManager.notify(id, builder.build());

但您也可以使用 setUsesChronometer NotificationCompat 类的方法。这会使用给定的时间戳自动显示一个计时器(可以使用 setWhen 进行设置)。

关于android - 更新通知文本,而不是整个通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14885368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com