【Android】ダイアログ表示 ~ 基本編 / Notification(通知) ~

■ はじめに

ダイアログではないかもしれないけど、
ユーザ通知という観点から、Notification(通知)を実装してみる

■ サンプル

import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
import android.os.Bundle
import androidx.core.app.NotificationCompat
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener {
            this.notify(
                "通知内容",
                "タイトル",
                "サブテキスト",
                "右端")
        }
    }

    @Suppress("DEPRECATION")
    fun notify(
        content: String,
        title: String,
        subText: String,
        contentInfo: String) {

        // カテゴリー名(通知設定画面に表示される情報)
        val notifyName = getString(R.string.app_name)
        // システムに登録するChannel ID
        val channelId = getString(R.string.app_name)
        // 通知の詳細情報(通知設定画面に表示される情報)
        val notifyDescription = "Hello World!"
        // ICon
        val icon = R.drawable.ic_menu_info_details
        // Notification ID
        val notificationId = 1

        val notificationManager =
            getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            // APIが「26」以降の場合
            if (notificationManager.getNotificationChannel(channelId) == null) {
                val channel = NotificationChannel(
                    channelId, notifyName, NotificationManager.IMPORTANCE_HIGH)
                channel.apply {
                    description = notifyDescription
                }
                notificationManager.createNotificationChannel(channel)
            }
            val notification = NotificationCompat
                .Builder(this, channelId)
                .apply {
                    setSmallIcon(icon)
                    setContentTitle(title)
                    setContentText(content)
                    setSubText(subText)
                    setContentInfo(contentInfo)
                }.build()
            notificationManager.notify(notificationId, notification)
        } else {
            // APIが「25」以下の場合
            val notification = Notification.Builder(this)
                .setContentTitle(title)
                .setContentText(content)
                .setSubText(subText)
                .setContentInfo(contentInfo)
                .setSmallIcon(icon)
                .build()

            notificationManager.notify(notificationId, notification)
        }
    }
}

参考文献

https://android-java.hatenablog.jp/entry/2019/02/19/214301
https://qiita.com/naoi/items/367fc23e55292c50d459
https://qiita.com/roga7zl/items/4c9e1b62db1b427a9226
https://qiita.com/SnowMonkey/items/7cdc52c83bb9490d97a5

関連記事

ダイアログ表示 ~ 入門編 / トースト・Toast ~
https://dk521123.hatenablog.com/entry/2013/10/14/002656
ダイアログ表示 ~ 基本編 / YES/NO/CANCELボタン ~
https://dk521123.hatenablog.com/entry/2013/10/06/122942
ダイアログ表示 ~ 基本編 / リスト選択 ~
https://dk521123.hatenablog.com/entry/2013/10/07/005850
ダイアログ表示 ~ 基本編 / チェックボックスラジオボタン
https://dk521123.hatenablog.com/entry/2013/10/09/001500
ダイアログ表示 ~ 基本編 / チェックボックスラジオボタン
https://dk521123.hatenablog.com/entry/2013/10/09/001500
ダイアログ表示 ~ 基本編 / 日付・時間ダイアログ ~
https://dk521123.hatenablog.com/entry/2020/07/26/000000
アラーム機能を実装するには
https://dk521123.hatenablog.com/entry/2020/07/14/000000
Kotlin / Realm で英単語帳を作る
https://dk521123.hatenablog.com/entry/2020/07/20/232009