Android Kotlin 通知サンプル
- Android 8.0 以降で通知をまとめる(以前ではまとめない)
- 通知クリックでアクティビティを起動する
Android 8.0
通知がまとまっている
通知を展開
Android5.0
通知はまとまらない
サンプル
- private var mNotificationNumber = 0
- /**
- * 通知
- * @see http://android.techblog.jp/archives/7976103.html
- * @see https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ja
- * @see https://developer.android.com/training/notify-user/build-notification
- * @see https://developer.android.com/training/notify-user/channels
- * @see https://developer.android.com/training/notify-user/group?hl=ja#create_a_group_and_add_a_notification_to_it
- * @see https://qiita.com/mstssk/items/14e1b94be6c52af3a0a6
- * @see https://qiita.com/naoi/items/367fc23e55292c50d459
- * @see https://www.gaprot.jp/pickup/old-tips/android-o/notification-channel
- */
- private fun notification() {
- val channelId = "channelId"
- val channelName = "GcpApiTrial"
- val groupKey = "groupKey"
- val notifyId = ++mNotificationNumber;
- val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
- // 通知チャネルの登録
- // targetSdkVersion(26 Oreo) 以降の場合、通知チャネルを使用しないと通知が表示されない
- // 複数のチャンネルを作り、個々の通知を任意のチャンネルに割り振ることによって、
- // 重要度や通知音などの属性を一括で指定することができる
- val summaryId = 0
- if (manager.getNotificationChannel(channelId) == null) {
- val channel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT)
- channel.apply {
- description = "GcpApiTrial Notification"
- }
- manager.createNotificationChannel(channel)
- }
- val summary = NotificationCompat.Builder(this, channelId).run {
- setContentTitle("Summary Content Title")
- setContentText("New Message.")
- setSmallIcon(R.drawable.ic_menu_camera)
- setStyle(NotificationCompat.InboxStyle().addLine("New Message Add line"))
- setNumber(mNotificationNumber)
- setGroup(groupKey)
- setGroupSummary(true)
- build()
- }
- manager.apply {
- notify(summaryId, summary)
- }
- }
- // 通知クリックでアクティビティを起動
- val intent = Intent(this, MainActivity::class.java)
- val stackBuilder = TaskStackBuilder.create(this)
- stackBuilder.addParentStack(MainActivity::class.java)
- stackBuilder.addNextIntent(intent)
- val pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT)
- // 通知の作成
- val notification = NotificationCompat.Builder(this, channelId).run {
- setContentTitle("New Message")
- setContentText("You've received new message. No.$mNotificationNumber")
- setSmallIcon(R.drawable.ic_menu_camera)
- setNumber(mNotificationNumber)
- setContentIntent(pendingIntent)
- setAutoCancel(true) // 通知クリックでクリア
- setGroup(groupKey)
- build()
- }
- manager.apply {
- notify(notifyId, notification)
- }
- }
参考
http://android.techblog.jp/archives/7976103.html
https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ja
https://developer.android.com/training/notify-user/build-notification
https://developer.android.com/training/notify-user/channels
https://developer.android.com/training/notify-user/group?hl=ja#create_a_group_and_add_a_notification_to_it
https://qiita.com/mstssk/items/14e1b94be6c52af3a0a6
https://qiita.com/naoi/items/367fc23e55292c50d459
https://www.gaprot.jp/pickup/old-tips/android-o/notification-channel