如何在安卓系统中获取通知计数?

7
我有一个自定义启动器,并显示一个自定义通知图标。如果用户点击通知图标,他就可以看到通知。这部分正常工作。我可以展开通知列表。
但现在我的要求是,由于我正在使用自定义通知图标,我希望显示通知计数(如果有任何通知,或者如果有10个通知)。我希望显示用户未读/未选中的通知数量。
如何获取未选中通知的数量(计数)?
我已经查看了一些示例和链接,例如: 链接1 链接2 但是所有这些链接都显示如何创建通知,或者如何展开通知列表。如何获得通知计数?
非常感谢任何代码或示例。
谢谢
3个回答

1
我想分享一下如何获取通知计数的策略。在阅读文档时,我没有看到任何存储和检索通知计数的方法。我正在做一个记事提醒,这个提醒在特定日期闹钟。考虑到我有很多提醒,向每个提醒发送通知只会替换通知列表中的一个。这不好。我的接收器也没有办法知道第n次调用通知的时间。在我看来,这种情况下通知是缺乏吸引力的。

因此,我看到的一个策略是将计数责任直接推迟到数据库。我必须提供一个方法,在数据库上返回我有多少过期的提醒,将其作为额外内容放入启动我的接收器的待处理意图中。从那里,我可以解包额外内容并相应地设置通知。这样,我得到了所需的信息,并且可以将通知内容建模为显示未触及的提醒数量。在图标旁边添加计数徽章似乎不可能,因为默认的Android不支持,但可以使用第三方解决方案或使用众所周知的Android UI,如三星的TouchWiz或Xperia中的UI。在网上搜索,似乎实现这一点又是另一回事。我更喜欢不这样做,只需通过我的内容显示已过期提醒的计数。

我希望这能帮助那些遇到类似问题的人,他们需要检索或存储给定唯一应用程序通知ID的通知计数。希望这可以帮到你!

0

如果您的目标API级别为18+,那么您很幸运,因为您可以提供一个NotificationListenerService来访问当前通知并/或在创建或解除时收到警报。

否则,您可以使用注册AccessbilityService并侦听AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED事件的旧技巧。是这种方法的一个很好的例子。


我尝试了AccessibilityService,但是我无法理解需要创建的服务中应该做什么。我真的对此一无所知,请提供更多信息。谢谢 - Ari
@Ari,请查看https://dev59.com/UGEh5IYBdhLWcg3wjEDn。 - matiash
我已经看到了这篇文章,但我缺少的是他在清单文件中提到的NotificationService服务类。请给我一些提示,告诉我在那个服务类中该做什么。 - Ari
@Ari 在清单中提到的类是已发布的那个类(只是名称不匹配)。 - matiash

0

你可以使用这个例子,它对我有效。

   Notification notification = new Notification(R.drawable.direction, "Cool Notification",
            System.currentTimeMillis());
    /********LIKE THIS*********/
    notification.number = notificationCount++;
    /********LIKE THIS*********/

    notification.setLatestEventInfo(context, "Cool Notification Title",
            "updated notificaiton message", null);


    NotificationManager nm = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    nm.notify(R.id.my_motification, notification);

因此,每次显示通知时,您都可以增加notification.number。


但是这种方式无法获取那些不是由我创建的通知的计数,假设我收到了电子邮件、短信的通知。我只能获取由我创建的通知的计数。 - Ari
是的,使用这种方法,您只能获得通知的计数,但对于其他问题我找不到解决方案,所以如果我找到了,我会分享的。 - wSakly

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