当前位置: 首页 > 知识库问答 >
问题:

如何跟踪通知以知道何时显示摘要通知

卢锋
2023-03-14

我想模拟Gmail关于通知栏通知的应用程序行为,它符合推荐的Android模式:http://developer.Android.com/design/patterns/notifications.html

Line 1 : Jane Smith
Line 2 : Hi John, this is a sample message...

即特定于单个邮件的通知,点击该通知将显示该特定电子邮件的屏幕。如果我通过刷清或使用“清除所有”清除通知,那么当我得到一个新消息时,我将得到另一个消息特定的通知。但如果我没有清除它,而我又收到另一封电子邮件,那么通知就会变成一个摘要通知,上面写着“两条新消息”,点击它就会指向收件箱。

我知道如何更新一个通知,问题是我如何计算哪些通知仍然在通知栏中,如果有的话。答案并不是那么简单,因为通知不会反映我有多少未读消息,它必须反映哪些消息仍然没有被用户确认,要么点击通知,要么清除通知。

我是否应该通过保存一个我们启动的通知列表来跟踪通知,被点击的通知(内容意图)和被清除的通知(删除意图)?我不认为这种方法是安全的...例如:如果通知因为我启动手机而被清除,会发生什么?我应该在哪里跟踪仍在显示的通知?共享偏好?

你通常怎么解决这个?

共有1个答案

范承志
2023-03-14

我也遇到了同样的问题,我也在Gmail上寻找合适的行为。我首先研究了以下场景:

假设用户正在积极使用Gmail应用程序(忽略与浏览器版本的任何交互),然后离开它:

  1. 从那时起,如果用户收到新的电子邮件,它将收到通知。
  2. 如果通知仍在,并且用户收到新的电子邮件,则通知将更新为包含自用户上次使用该应用程序以来N最近电子邮件标题的摘要。
  3. 如果用户取消通知,而另一封电子邮件到达,则会发出另一封摘要通知。
  4. 如果用户重新导航到应用程序中(通过单击通知或不单击通知),则所有现有通知都将被取消。

所以我找到的解决方案是保存关于已经在本地发布的通知的信息,使用这些信息创建单个通知或摘要,当用户再次打开应用程序时清除所有内容。

为了持久化通知信息,我创建了一个简单的模型,类似于如下所示:

public class NotificationBundle {
    private String mText;
    // Add any other relevant information about your notification here, 
    // particularly what you used to create your notification intent 
    // i.e. an item/message id to highlight, maybe?

    public String getText() {
        return mText;
    }

    public void setText(final String text) {
        mText = text;
    }
}

其思想是为您发出的每个通知创建一个实例。

有了这个结构之后,基本上剩下要做的就是:

>

  • 当您必须发出通知时:

    1. 使用要通知的信息创建新的NotificationBundle
    2. SharedPreference
    3. 检索现有 列表
    4. 如果绑定列表为空,则将发出单个通知。如果不是,您将发布一个摘要-在这种情况下,您可以使用您的包列表来构造您的摘要的内容。关于摘要通知的一篇很好的文章是[使用大视图样式]。
    5. 将新的NotificationBundle(从%1开始)添加到现有的列表 (从%2开始)中,并将其保存到SharedPreferences中。
    6. 使用notificationmanager.notify()发出通知。如果您始终在此处使用相同的通知id,如果您的应用程序中当前没有任何通知可见,它将创建一个新的通知,或者如果以前的通知可见,它将只更新通知。

    在主活动的onResume()方法中,确保使用NotificationManager.CancelAll()取消所有通知。还要确保从SharedPreferences中删除现有的列表

    这应该能起到作用。

  •  类似资料:
    • 问题内容: 如何获取提示通知。使用以下代码,我只能在状态栏上看到三个点,在通知栏上看到一个通知。 问题答案: 我遇到了同样的问题,但我使用的是较新的呼叫,该呼叫需要来自的频道ID 。 如果创建的通知的重要性值为,则该通知将仅作为抬头通知出现: 显示抬头通知:

    • 我知道有很多关于这个话题的文章,但我就是找不到正确的答案。 有没有办法知道用户何时收到远程通知以及用户何时在iOS8上点击了一个。我想知道这一点,因为当我收到它时,我想保存它,当用户点击它时,我想打开一些视图。 我找到了这个答案https://stackoverflow.com/a/16393957/1241217但问题是,当用户在应用程序中打开通知中心并单击其中一个时,该应用程序既不处于非活动状

    • 目前,我们使用三个嵌套的Foreach循环来获取运行批处理的信息。然而,我相当确定我们可以通过一个带有连接和子查询的MySQL语句来获取信息。 我们有大约30个类别,2000个用户。我们的目标是大约100个类别,拥有10万用户,尽管很明显Foreach循环并不理想(即使现在运行它们也需要大约一分钟)。 情况:用户希望得到通知,如果有工作可用于他们可以在某一领域做的贸易 目标:将批处理(每日、每周等

    • 有没有办法在Firebase云消息(FCM)中查看成功发送和失败的推送通知的数量?我可以看到使用 Firebase 控制台发送的消息,但我需要跟踪通过网络应用发送到设备的消息数量。 谷歌解释了如何在Android https://support . Google . com/Google play/Android-developer/answer/2663268上获取统计数据。但是iOS有没有类似

    • 问题内容: 我正在将推送通知从FCM发送到Android设备,这是通过将POST消息发送到包含JSON正文的FCM来完成的。 如果我发送相同的JSON正文两次,则Android设备将显示两个通知(或三个或四个,…)。但我只想显示一个。 “ collapse_key”应该可以解决这个问题,对吧?(FCM文档) 但是,它应该插入哪里或如何插入? 当前JSON正文: 我已经尝试了多种方式来包含“ col

    • 问题内容: 如何在Android的通知栏中显示简单的通知?请帮助我提供最简单的解决方案。 问题答案: 我假设您是在Notificationbar中询问通知。如果是这样,请尝试以下代码,