0

我是一个在通知部门很强大的应用程序的开发人员。我最近升级到运行 Android 4.0.3 的 HTC One X,并注意到我以前运行 Android 2.1 的手机从未注意到的问题。

我的应用程序发布的通知没有设置日期,并且我以前的电话通知中从未显示日期。在我的新手机上,发布通知时没有出现日期,但过了一会儿,出现了“Thu, 1 Jan 1970”日期,我不明白为什么。

当我说“一段时间后”时,我并不是说您一直盯着屏幕几秒钟/几分钟并看到日期出现。我的意思是在使用手机一段时间后,放下它,再次使用它,无论如何,最终,我的应用程序发布的所有通知都会有那个日期。

我已经看到这种情况发生了几次,但我找不到模式并理解何时发生这种情况,看看我是否能找到解决办法。有谁知道为什么这可能会发生在 ICS 上?

我不知道它有多相关,但我的postNotification方法有完整的代码:

NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);

Intent intent = NoteEditorSingleActivity.createIntent(mContext);
intent.putExtra(AgendaNotesAdapter.KEY_ROW_ID, notifyId);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

builder.setContentIntent(PendingIntent.getActivity(mContext, (int)notifyId, intent,
        PendingIntent.FLAG_CANCEL_CURRENT));

builder.setContentTitle(noteTitle);
builder.setContentText(noteDescription);
builder.setSmallIcon(iconId);
builder.setTicker(noteTitle.length() > 0 ? noteTitle : null);
builder.setWhen(0);

Notification notification = builder.getNotification();

long noteSortOrder = Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD ? 1 : -1;

notification.flags = Notification.FLAG_NO_CLEAR;
notification.when = noteSortOrder * notifyId;

mNotificationManager.notify((int)notifyId, notification);

我知道我正在使用构建器将 0 设置为 0,并通过直接在对象中when更改值来设置不同的值。我不记得我最初为什么这样做,但它是有原因的。whennotification

我不明白的是,在调用该notify()方法并查看状态栏中的通知之后的那一刻,没有日期。为什么使用手机一段时间后会出现。

这就是我想知道和解决的问题。

4

1 回答 1

1

您的通知when应该设置为您希望它显示的时间(自 UNIX 纪元以来的毫秒数:1970 年 1 月 1 日 00:00:00 UTC)。将其设置为 0 是一种不显示任何时间戳的流行但未记录(因此不能保证有效)的方式。

您没有显示notifyId设置的位置,但您可能设置when为自此处纪元以来的低毫秒数:

notification.when = noteSortOrder * notifyId;

您首先将其设置为0然后再更改它的原因是您正在使用另一个未记录的黑客,试图影响系统如何将您的通知与其他人联系起来。通过构建设置为 0 的通知(使用builder.getNotification()when,您将获得没有时间戳的视图布局。然后,您在调用之前更改时间戳以影响排序顺序notify()

ICS 恰好最终以您设置的非常低的时间戳显示您的通知这一事实可能会或可能不会修复。可能只是 ICS 最终会在一段时间后重新布置您的通知,这当然会使用您提供的最后一个时间戳。

就个人而言,我认为最好的选择是删除黑客。(好吧,我认为您可能可以时间戳设置为0完全隐藏时间戳,但排序顺序黑客似乎是在自找麻烦。)

于 2012-07-04T05:58:24.597 回答