Android API 24实现通知堆叠分组的问题及解决方案
解决API 24及以下设备的通知堆叠分组问题
我之前也碰到过和你一样的需求——要实现类似Gmail的通知堆叠分组效果,但一开始踩了个坑:直接用setGroup却没实现堆叠,查文档发现官方提到的NotificationChannelGroup只支持API 26及以上,可我的测试设备是API 24,而且明明看到其他应用在这个版本上能实现堆叠,肯定有其他办法!
后来终于找到了解决方案:在发送子通知之前,必须先发送一条作为容器的汇总通知,关键要点如下:
- 汇总通知要设置
setGroupSummary(true),并且指定和子通知相同的分组ID - 把汇总通知的ID设为0,这样如果之前的汇总通知已经被移除,会重新创建;如果存在则不会重复生成,完美兼容
以下是经过验证可用的完整代码:
NotificationManagerCompat nmng = NotificationManagerCompat.from(context); Message[] msgs = folder.getMessagesByUID(a.data.uidnext, uidnext-1); // 先创建并发送汇总通知 Notification sum = new Notification.Builder(context) .setSmallIcon(R.drawable.notif) .setGroupSummary(true) .setGroup("CROWMAIL") // 和子通知使用同一个分组ID .build(); nmng.notify("CROWMAIL", 0, sum); // ID设为0,确保汇总通知的唯一性 // 循环发送每条子通知 for(int i = 0; i < msgs.length; i++) { Notification n = new Notification.Builder(context) .setContentTitle(msgs[i].getFrom()[0].toString()) .setContentText(msgs[i].getSubject()) .setSmallIcon(R.drawable.notif) .setGroupSummary(false) // 标记为子通知,不是汇总 .setGroup("CROWMAIL") // 绑定到同一个分组 .build(); nmng.notify("CROWMAIL", previous+i, n); // 用不同的ID区分每条子通知 }
这样设置后,API 24设备上的通知就能像Gmail一样堆叠显示了,亲测有效!
内容的提问来源于stack exchange,提问作者Fire Crow
相关产品推荐
相关产品推荐

