Giải pháp 1: Nếu bạn xử lý việc tạo thông báo, bạn có thể thử các bước sau:
Trước hết, mỗi khi bạn tạo thông báo mới, bạn có thể nhóm chúng theo cùng một phím bằng cách sử dụng setGroup(...)
:
val newMessageNotification1 = NotificationCompat.Builder(applicationContext, ...)
...
.setGroup("group_messages")
.build()
Khi bạn nhóm các thông báo theo cùng một id ("group_messages") , bây giờ bạn có thể tạo thông báo tóm tắt với mục đích khác nhau:
val notifyIntent = Intent(this, ResultActivity::class.java).apply {
val notifyIntent = Intent(this, ResultActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val notifyPendingIntent = PendingIntent.getActivity(
this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT
)
val summaryNotification = NotificationCompat.Builder(applicationContext, ...)
.setSmallIcon(android.R.drawable.ic_btn_speak_now)
.setContentIntent(notifyPendingIntent)
.setContentTitle("Grouped notification title")
.setContentText("Grouped notification text")
.setGroup("group_messages")
.setGroupSummary(true)
.build()
Bước cuối cùng, bạn có thể if
kiểm tra để đảm bảo rằng bạn có nhiều hơn 1 thông báo với cùng một nhóm và sau đó thông báo bằng thông báo nhóm:
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationManagerCompat = NotificationManagerCompat.from(applicationContext)
notificationManagerCompat.notify(ID, newMessageNotification1)
val amountOfNotificationsInSameGroup = notificationManager.activeNotifications
// Here we filter notifications that are under same group
.filter { it.notification.group == "group_messages" }
.size
if (amountOfNotificationsInSameGroup >= 2) {
// if we already have minimum of 2 notifications, we'll group them under summary notification
notificationManagerCompat.notify(SUMMARY_NOTIFICATION_ID, summaryNotification)
}
Bạn có thể kết hợp mã trong onMessageReceived
phương thức của bạn . Như bạn có thể thấy, bây giờ bạn có thể có ý định tùy chỉnh để xử lý các thông báo được nhóm. Bạn có thể đọc thêm về các thông báo được nhóm ở đây .
Giải pháp 2: Nếu bạn không muốn xử lý việc tạo thông báo và vẫn muốn biết liệu các thông báo có được nhóm hay không, bạn có thể thử giải pháp sau:
NotificationManager
có chức năng getActiveNotutions () sẽ trả về các thông báo đã được đăng bởi ứng dụng gọi điện và chưa bị người dùng loại bỏ. Khi bạn nhấp vào thông báo được nhóm trong Android, thông báo sẽ không bị loại bỏ. Do đó, bạn có thể kiểm tra kích thước của thông báo hoạt động trong hoạt động trình khởi chạy của mình để phát hiện xem ứng dụng có được khởi chạy hay không bằng cách nhấp vào thông báo được nhóm / gói:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val notificationManager =
applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (notificationManager.activeNotifications.size >= 4) {
// Notifications are grouped
// Put your logic here
// Do not forget to clear notifications
NotificationManagerCompat.from(this).cancelAll()
}
}
}
Cá nhân, tôi thích giải pháp đầu tiên, nhưng theo các vấn đề bạn đã đăng, bạn cũng có thể sử dụng tùy chọn thứ hai nhưng lưu ý rằng bạn sẽ không thể phân biệt được nếu ứng dụng được khởi chạy từ trình khởi chạy hoặc bằng cách nhấp vào thông báo được nhóm.
Với giải pháp thứ hai có thể có những câu hỏi sau:
Q1: Làm thế nào tôi có thể phân biệt nhấp chuột thông báo bình thường từ nhóm một trong cùng một hoạt động?
- Đơn giản là bạn có thể xác định click_action
và chuyển tiếp các nhấp chuột thông báo bình thường cho các hoạt động khác nhau. Kiểm tra tài liệu .
Nếu bạn muốn thay thế các thông báo trước đó, bạn cũng có thể định nghĩa tương tự tag
trong JSON thông báo của mình ở phía phụ trợ. Theo cách này, thông báo sẽ không được gói bởi vì thông báo mới hơn sẽ thay thế thông báo cũ bằng cùng một thẻ. Kiểm tra tài liệu .
Tôi hy vọng câu trả lời của tôi sẽ giúp.