通知消息样式:消息存储位置应该放在哪里?

7

我正在开发一个消息应用程序,我想使用NotificationCompat.MessagingStyle来处理通知。它通常适用于单条消息,但每条添加的消息只会替换上一条消息,而不是显示接收到的每条消息,直到它们被清除或查看为止(期望的结果)。查看文档后,他们建议像这样添加消息:

.addMessage(messages[1].getText(), messages[1].getTime(), messages[1].getPerson())
.addMessage(messages[2].getText(), messages[2].getTime(), messages[2].getPerson())

这让我猜想他们在某个数组中存储这些消息,但我不确定应该在哪里实现它。如果我在同一类中创建一个新数组,我认为结果将是相同的。它应该保存到共享首选项中(似乎有点占用内存),或者保存在未读消息的小型数据库中?我已经为我的消息存储了一个值,用于判断它们是否被发送或接收。我可以运行一个查询来获取所有未读消息并填充一个列表,然后迭代它,但这似乎有点过度。你有什么建议吗?
更新:
尝试制作消息列表并像这样添加它们,但还是没有成功。
NotificationCompat.MessagingStyle messagingStyle = new 
NotificationCompat.MessagingStyle(message.getRecipientName());         
messagingStyle.setConversationTitle(
getSmsTodayYestFromMilli(message.getTime_stamp().getTime()));
if (messages != null)
   for(DatabaseMessage dbMessage : messages){         
           messagingStyle.addMessage(dbMessage.getMessage(),
           dbMessage.getTime_stamp().getTime(),dbMessage.getRecipientName());
      }
   }
notificationBuilder.setStyle(messagingStyle);

请确保您使用不同的notificationId来生成通知。 - pRaNaY
不,情况并非如此,但谢谢。创建一个新的通知ID会创建一个新的通知,我想要做的是向现有通知添加一条新消息。 - martinseal1987
2个回答

5

我知道这是一个老问题,但这对某些人有用。

您可以从现有的通知中提取之前的消息:

NotificationCompat.MessagingStyle style = NotificationCompat.MessagingStyle.extractMessagingStyleFromNotification(existingNotification);
style.getMessages();

这个解决方案不需要使用数据库。您可以使用一个辅助函数来获取现有的通知(如果有的话),请参考此答案 - bensadiku

3

我找到了如何做到这一点,但仍然不确定在哪里存储列表,但要添加消息,实际上需要创建一个NotificationCompat.MessagingStyle.Message,然后使用addMessage方法,现在我正在尝试获取所有未读消息的列表并对它们进行迭代,但仍存在问题,但我认为这些问题值得提出新的问题,以下是添加消息的代码:

NotificationCompat.MessagingStyle messagingStyle = new 
NotificationCompat.MessagingStyle(message.getRecipientName());
        messagingStyle.setConversationTitle(getSmsTodayYestFromMilli(
        message.getTime_stamp().getTime()));
        if (messages != null){
            Log.d(MYTAG,"list size " + messages.size());
            for(DatabaseMessage databaseMessage : messages){
                NotificationCompat.MessagingStyle.Message notificationMessage  = new 
                NotificationCompat.MessagingStyle.Message(
                        databaseMessage.getMessage(),
                        databaseMessage.getTime_stamp().getTime(),
                        databaseMessage.getRecipientName()
                );
                messagingStyle.addMessage(notificationMessage);
            }
        }

notificationBuilder.setStyle(messagingStyle);

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