2012-07-04 54 views
0

我是一個強大的通知部門的應用程序的開發人員。我最近升級到運行Android 4.0.3的HTC One X,並注意到我之前運行Android 2.1的手機從未注意過的問題。發佈通知顯示日期「星期四,1970年1月1日」過了一段時間

我的應用程序發佈的通知沒有設置日期,並且我以前的電話通知中從未顯示日期。在我的新手機上,當發佈通知時,日期不會出現,但過了一段時間後,「星期四,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()方法並查看狀態欄中的通知之後,沒有日期。爲什麼在使用手機一段時間後會出現。

這就是我想知道和解決的問題。

+3

這是值得評論午夜上午1970年1月1日,UTC(格林威治標準時間)是與時間= 0相關的日期。 – djconnel

回答

1

您的通知的when應該設置爲您希望顯示的時間(自UNIX時代1970年1月1日00:00:00 UTC開始,以毫秒爲單位)。將其設置爲0是一種流行的但未公開的(因此不保證工作)的方式,不顯示任何時間戳。

你沒有表現,其中notifyId設置,但由於時代在這裏你可能設置when爲低的毫秒數:

notification.when = noteSortOrder * notifyId; 

你將它設置爲0第一和原因那麼稍後更改它就是您正在使用另一個無證件破解,試圖影響系統如何將您的通知與其他人關聯起來。通過建立when設置爲0的通知(使用builder.getNotification()),您可以獲得沒有時間戳的View。然後在調用notify()之前更改時間戳以影響排序順序。

ICS碰巧實際上最終以您設置的非常低的時間戳顯示您的通知的事實是可能或不可以解決的。這可能只是因爲ICS在一段時間後會重新佈局您的通知,這當然會使用您提供的最後一個時間戳。

個人而言,我認爲最好的選擇是刪除黑客。 (嗯,我想你可以可能逃脫將時間戳設置爲0完全隱藏時間戳,但排序順序hack似乎要求麻煩。)

+0

是啊,也許...我想我添加排序順序黑客,因爲他們改變了通知出現的順序從薑餅到ICS(可能是Honeycomb,但我真的沒有在Honeycomb上測試過我的應用程序,所以不能說)。我將不得不在應用程序中重新考慮一些有關通知的事情,並查看避免不可預測行爲的最佳解決方案。 –

+0

我只是儘可能的解決方案...我可以使用'RemoteView'並使用自己的佈局,同時也保持排序順序。唯一的問題是,我真的希望我的通知具有與操作系統相同的風格(AOSP,Sense,Touchwiz等)。有沒有辦法在運行時拉動通知佈局?這將是解決方案,因爲我可以輕鬆隱藏時間戳記視圖。 –

相關問題