Dav*_*ini 44 android android-notifications
序幕
我正在尝试在通知上添加计时器.计时器是一项服务.每一行调用此行(继续Thread是一个"running"布尔值,timeString是精心设计的String,显示时间):
NotificationChrono.updateNotification(getApplicationContext(), continueThread,
NOTIF_ID, timeString, "Chronometer", notificationManager);
Run Code Online (Sandbox Code Playgroud)
这是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());
}
}
Run Code Online (Sandbox Code Playgroud)
问题
每隔一秒,通知就会被删除并重新创建,从视觉上来说,这意味着每秒通知都会消失并重新出现在通知列表中.
我想要的只是更新TITLE文本,而不是每秒都重新创建通知.可能吗?
Pie*_*lse 98
确保NotificationCompat.Builder
每次都使用相同的构建器来创建Notification
!
虽然第一次必须设置所有内容,但第二次使用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());
Run Code Online (Sandbox Code Playgroud)
但您也可以使用该类的setUsesChronometer
方法NotificationCompat
.这会使用给定的时间戳自动显示计时器(能够使用setWhen设置).
小智 6
感谢 PieterAelse 的想法!
在我的情况下,我不得不在第二次和以下时间使用这个(构建一个新的通知):
builder.setContentText(getConvertedTime(millisUntilFinished));
Notification notification = builder.getNotification();
notification.flags = Notification.FLAG_ONGOING_EVENT;
nm.notify(R.string.app_name,notification);
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
归档时间: |
|
查看次数: |
44787 次 |
最近记录: |