2014-10-09 39 views
1

我試圖在我的應用上實現一個InboxStyle通知,以便人們看到他們所有的最後通知,但是我找不到更新最後一個通知的方式,它只是覆蓋即使我使用相同的NOTIF_ID。用一個新行更新Inbox樣式通知

我的實際代碼:

private void sendNotification(String notif, String[] args) { 
    NotificationManager mNotificationManager = (NotificationManager) 
      this.getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, main_activity.class), 0); 


    if (notif.equals("NOTIF_0")){ 
     notif = String.format(getString(R.string.NOTIF_0), args[0]); 
    } else if (notif.equals("NOTIF_1")) { 
     notif = String.format(getString(R.string.NOTIF_1), args[0]); 
    } else if (notif.equals("NOTIF_2")) { 
     notif = String.format(getString(R.string.NOTIF_2), args[0]); 
    } else if (notif.equals("NOTIF_2_EX")) { 
     notif = String.format(getString(R.string.NOTIF_2_EX), args[0], args[1], args[2]); 
    } else if (notif.equals("NOTIF_3")) { 
     notif = String.format(getString(R.string.NOTIF_3), args[0]); 
    } else if (notif.equals("NOTIF_3_EX")) { 
     notif = String.format(getString(R.string.NOTIF_3_EX), args[0], args[1], args[2]); 
    } else if (notif.equals("NOTIF_3_EX_DIS")) { 
     notif = String.format(getString(R.string.NOTIF_3_EX_DIS), args[0], args[1], args[2]); 
    } else if (notif.equals("NOTIF_4")) { 
     notif = String.format(getString(R.string.NOTIF_4), args[0]); 
    } else if (notif.equals("NOTIF_5")) { 
     notif = String.format(getString(R.string.NOTIF_5), args[0]); 
    } else if (notif.equals("NOTIF_5_EX")) { 
     notif = String.format(getString(R.string.NOTIF_5_EX), args[0], args[1], args[2]); 
    } else if (notif.equals("NOTIF_6_EX")) { 
     notif = String.format(getString(R.string.NOTIF_6_EX), args[0], args[1]); 
    } else if (notif.equals("NOTIF_31")) { 
     notif = String.format(getString(R.string.NOTIF_31), args[0]); 
    } 

    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); 
    inboxStyle.addLine(notif); 

    NotificationCompat.Builder mBuilder = 
     new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setAutoCancel(true) 
       .setContentTitle(getString(R.string.app_name)) 
       .setContentText(notif); 

    mBuilder.setStyle(inboxStyle); 
    mBuilder.setContentIntent(contentIntent); 

    Notification notification = mBuilder.build(); 

    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
    notification.defaults |= Notification.DEFAULT_SOUND; 
    notification.defaults |= Notification.DEFAULT_LIGHTS; 
    notification.defaults |= Notification.DEFAULT_VIBRATE; 
    notification.ledARGB = 0xff00ff00; 
    notification.ledOnMS = 300; 
    notification.ledOffMS = 1000; 
    notification.flags |= Notification.FLAG_SHOW_LIGHTS; 

    mNotificationManager.notify(1, notification); 
} 

額外的問題:有沒有隻顯示最後5個通知(新一和4從最後通知更新)的方法嗎? 我還在尋找一種顯示BigView而不是InboxStyle的方式,但只有當只有一個通知處於活動狀態時,否則通知應顯示爲列表,是否可以查看是否存在具有相同ID的通知並基於該檢查加載一種或另一種風格?在因特網上找不到關於它的任何信息。

回答

0

現在管理做一個醜陋的方式。我將最近的通知保存在SQLite數據庫中,隨時檢索它們並構建更新的通知。 我在啓動應用程序時清理數據庫,以便下次用戶只有新通知。

我不知道這是否是最好的解決方案,但我找不到任何API來訪問舊通知以從中檢索信息,因此我實施了此解決方案。