安卓蜂巢版本上的持续通知行为不一致。

9
我有一个持续的后台下载通知。我成功创建了多个同时更新的进度条通知,这些通知还可以被取消。在所有已测试设备上都能正常工作,但在某些较新的 Android 平板电脑(带有 Honeycomb 系统)上无法正常运行。
现在的问题是原始通知消息不断重新显示,导致用户无法单击时钟以呼出正在进行的通知列表。因此,甚至看不到任何进度条。是否有人成功地在 Honeycomb 上创建进度条通知?
另外,我发现黑色通知文本在通知列表的黑色背景上不再可读。是否有方法为 Honeycomb 设备设置白色文本?
注意:这已在运行 Android 3.0.1 的 Optimus Pad L-06C 和 Motorola Xoom 上进行了测试。
以下是通知创建内容:
// Create new notification for downloading
mNotification = new Notification(R.drawable.owl_icon, getNotificationText(R.string.notification_content_downloading), 0);
mNotification.flags |= (Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT);

// Create custom progress bar view
RemoteViews contentView = new RemoteViews(CourseSyncService.this.getPackageName(), R.layout.notification_downloading);
contentView.setTextViewText(R.id.notificationTitle, mCourseTitle);
contentView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
contentView.setTextViewText(R.id.notificationPercentage, "0%");
mNotification.contentView = contentView;

// Create pending intent for the notification
Intent notificationIntent = new Intent(CourseSyncService.this, CancelDownloadActivity.class);
notificationIntent.putExtra(CourseSyncService.KEY_USER_ID, mUserId);
notificationIntent.putExtra(CourseSyncService.KEY_COURSE_ID, mCourseId);
notificationIntent.putExtra(CourseSyncService.KEY_COURSE_TITLE, mCourseTitle);
PendingIntent contentIntent = PendingIntent.getActivity(CourseSyncService.this, mCourseId, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
mNotification.contentIntent = contentIntent;

// Launch notification
mNotificationManager.notify(mCourseId, mNotification);

这是我更新通知的方法:

// Update the progress bar of the notification view 
mNotification.contentView.setProgressBar(R.id.notificationProgressBar, mItemCount, mProgressCount, false);
mNotification.contentView.setTextViewText(R.id.notificationPercentage, String.valueOf(mProgress) + "%");
mNotificationManager.notify(mCourseId, mNotification);

1
notify(id, notification) 的文档说明在相同的 id 上,通知“将被更新的信息替换”。似乎 Honeycomb 添加了一个可怕的重新显示功能,在之前的版本中没有出现过。 - Rene
1
恭喜你超过了1500!我的投票让你成功了...但更重要的是,感谢你提出这个问题,我也遇到了同样的问题,现在解决了。 - JPM
4个回答

7
为了解决这个问题,您需要在持续通知上设置按位Notification.FLAG_ONLY_ALERT_ONCE。这将确保用户只在通知首次显示时收到通知。之后,他们必须打开通知托盘才能查看通知的状态。
Notification notification = new Notification();
notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE;

你是我的英雄!对这个标志的注释写道:“将位设置为按位或运算应该设置的标志字段,如果您希望每次发送通知时播放声音和/或振动,即使在此之前未取消,则可以使用它。” 所以这可能就是我从未尝试使用它的原因。谢谢! - Chase

1
我认为我找到了这个问题的解决方法,如果还有人在寻找的话。问题出在当你创建一个新的通知时,"when"字段被设置为当前系统时间。如果你查看:http://developer.android.com/reference/android/app/Notification.html#when,你会发现下载操作的"when"字段应该在开始时被标记。如果你不这样做(就像我一样),并且你有多个下载通知,它们将继续根据"when"字段重新排序。

0

通知列表在GB上没有黑色背景,只有状态栏被改成了黑色。是哪个设备引起了问题?您是否尝试在标准GB上进行测试,以确保这不是特定于该设备的问题,而是平台中发生的更改?您知道这个设备是否与CDD兼容并通过了CTS吗?


我知道我应该提到型号。我目前正在使用运行Android 3.0.1的Optimus Pad L-06C。我还没有测试过其他设备,但一旦我拿到手就会尽快测试。我不知道这个设备是否符合CDD标准。我将在问题中更新相关信息。谢谢。 - Chase
另外,我错误地将Gingerbread写成了Honeycomb。而且我已经在两台设备上验证过了。 - Chase
1
啊,是的,在Android 3.0中作为新UI的一部分,背景发生了变化。这个在Stack Overflow上的答案应该会有所帮助:https://dev59.com/4W445IYBdhLWcg3wapvF - hackbod
但是你解决了多个正在进行的通知的第一个问题吗? - CeccoCQ

0

为解决这个问题(在4.0.3上,没有在之前的API级别上尝试),我不得不保持对我的Notification的引用,每当有变化时就更新它,然后将相同的Notification对象发送到NotificationManager.notify()

虽然我按@twaddingtion的答案中指定的设置了flags,并将相同的id发送到NotificationManager,但我的通知在SystemBar中出现了混乱。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接