解決策1: 通知の作成を処理する場合は、次の手順を試すことができます。
まず、新しい通知を作成するたびに、次を使用して同じキーでそれらをグループ化できますsetGroup(...)
。
val newMessageNotification1 = NotificationCompat.Builder(applicationContext, ...)
...
.setGroup("group_messages")
.build()
同じID ( "group_messages")で通知をグループ化したので、異なる目的で要約通知を作成できます。
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()
最後のステップとしてif
、同じグループに複数の通知があることを確認してから、グループ通知で通知できます。
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)
}
onMessageReceived
メソッド内でコードを組み合わせることができます。ご覧のとおり、グループ化された通知を処理するカスタムインテントを設定できます。グループ化された通知の詳細については、こちらをご覧ください。
解決策2: 通知の作成を処理したくないが、通知がグループ化されているかどうかを知りたい場合は、次の解決策を試すことができます。
NotificationManager
持っているgetActiveNotifications()を呼び出すアプリによって投稿されていますし、まだユーザーによって却下されていない通知を返す関数。Androidでグループ化された通知をクリックしても、通知は閉じられません。したがって、ランチャーアクティビティでアクティブな通知のサイズを確認して、グループ化/バンドル通知をクリックしてアプリが起動されたかどうかを検出できます。
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()
}
}
}
個人的には、最初の解決策をお勧めしますが、投稿した問題に応じて、2番目のオプションも使用できますが、アプリがランチャーから起動されたか、グループ化された通知をクリックして起動されたかを区別できないことに注意してください。
2番目のソリューションでは、次の質問がある場合があります。
Q1:通常の通知クリックを同じアクティビティのグループ1から区別するにはどうすればよいですか?
-単にclick_action
、通常の通知クリックを定義して別のアクティビティに転送できます。ドキュメントを確認してください。
以前の通知を置き換える場合はtag
、バックエンド側の通知JSON でも同じように定義できます。このように、新しい通知は古い通知を同じタグで置き換えるため、通知はバンドルされません。ドキュメントを確認してください。
私の答えが役に立てば幸いです。