Android Oreo+中如何在不推送通知的情况下更新应用程序徽章计数

4
我希望能在没有推送通知的情况下更新应用程序图标徽章计数(例如:静默推送)。我只想在阅读应用内任何通知后更新应用程序徽章计数,类似于领英,在我阅读任何通知时更新应用程序徽章计数。目前,我已经实现了从FCM获取负载并使用已配置静默推送通知通道的Android通知构建器更新徽章计数的解决方案。
var notificationBuilder = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
    .setContentTitle("New Messages")
    .setContentText("You've received 3 new messages.")
    .setSmallIcon(R.drawable.ic_notify_status)
    .setNumber(messageCount)
    .build()

但是这对我来说行不通,因为我还需要在应用程序内读取任何通知后更新计数。如果我从通知托盘中清除通知,则计数也会从应用程序徽章中消失,有没有办法在应用程序内设置计数而不使用推送通知?提前致谢。


我还需要在应用程序内读取任何通知后更新计数。使用类似于您在问题中展示的代码更新“通知”中的新数字。该代码与 FCM 无关,可在您需要的任何地方使用。 - CommonsWare
我尝试了这个,正在尝试使用上述代码设置计数,但为此我需要再次在通知栏中显示静默推送。 - Ammy Kang
1个回答

1
经过长时间的徽章计数更新功能研究,我得出结论:Android没有提供任何API来更新应用程序图标上的徽章计数而不使用通知。在Android中,我们可以内部发送通知,并借助此功能可以更新徽章计数。
因此,我们需要通知设备更新徽章计数,如果没有通知,我们就无法更新它。如果我们将计数发送到通知生成器,则只需注意每次更新徽章计数以保持通知ID相同,否则它会将计数添加到其先前的通知中。只需保持通知ID相同,并创建一个带有静默推送的单独通道以更新徽章计数即可。
public static int NOTIFICATION_ID = 1001; 
NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());

那个解决方案将覆盖先前的计数。

这个解决方案目前进展如何?您是否遇到了任何特定于Android操作系统/设备型号的问题? - mr5

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