我是通知部门强大的应用程序的开发人员。我最近升级到了运行Android 4.0.3的HTC One X,发现我在之前运行Android 2.1的手机上没有注意到这个问题。
我的应用发布的通知未设置日期,并且我以前的手机通知中从未显示过日期。在我的新手机上,当发布通知时,日期不会出现,但过了一段时间,“Thu,1970年1月1日”日期出现,我无法理解为什么。
当我说“过了一会儿”时,我并不是说你一直盯着屏幕几秒钟/分钟,看看日期出现了。我的意思是在使用手机一段时间后,将其放下,再次使用它,无论如何,最终,我的应用程序发布的所有通知都将具有该日期。
我已经看过这种情况发生了几次,但是我找不到一个模式,并且在发生这种情况时能够理解我是否能找到修复方法。有没有人有任何想法为什么会在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);
我知道我正在使用构建器将when
设置为0,并通过直接更改when
对象中的notification
值来设置不同的值。我不记得为什么我最初这样做了,但这是有原因的。
我不明白的是,在调用notify()
方法并查看状态栏中的通知后的那一刻,没有日期。为什么在使用手机一段时间后会出现。
这就是我想知道和解决的问题。
答案 0 :(得分:1)
您的通知when
应设置为您希望显示的时间(自UNIX纪元以来的毫秒数:1970年1月1日00:00:00 UTC)。将其设置为0是一种流行但未记录(因此无法保证工作)的方式,不显示任何时间戳。
您没有显示设置notifyId
的位置,但您可能会将when
设置为自此纪元以来的较低毫秒数:
notification.when = noteSortOrder * notifyId;
您首先将其设置为0
然后再更改它的原因是您正在使用另一个未记录的黑客,试图影响系统如何将您的通知与其他人相关联。通过将builder.getNotification()
设置为0来构建通知(when
),您可以在没有时间戳的情况下显示其View。然后,您在调用notify()
之前更改时间戳以影响排序顺序。
事实上,ICS实际上最终会以您设置的非常低的时间戳显示您的通知,这可能是也可能无法解决。可能只是ICS最终会在一段时间后重新布置您的通知,当然这会使用您给出的最后一个时间戳。
就个人而言,我认为最好的办法是删除黑客攻击。 (好吧,我认为你可能可以将时间戳设置为0
以完全隐藏时间戳,但排序顺序黑客似乎要求麻烦。)