ボタンをクリックすると通知が出る

Kotlin

AndroidManifest.xml

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

通知用のアイコンを用意する

res > new > Vector Asset から適当なアイコンを選んで「ic_notification」と名付けます

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private val CHANNEL_ID = "my_channel"

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

        createNotificationChannel()

        val btNotify = findViewById<Button>(R.id.btNotify)
        btNotify.setOnClickListener{ showNotification() }
    }

    private fun showNotification() {
        val intent = Intent(this, MainActivity::class.java)
        val pendingIntent = PendingIntent.getActivity(
            this, <--- Context 通常、thisはMainActivity
            0,  <--- 特定のPendingIntentを識別するためのID
            intent,  <--- 実行したいIntent(今回はMainActivityを開く)
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
            <--- 既存のPendingIntentがあれば上書きする or PendingIntentを変更できないようにする
        )
        val builder = NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_notification)
            .setContentTitle("通知タイトル")
            .setContentText("ボタンがクリックされました")
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setContentIntent(pendingIntent)
            .setAutoCancel(true) <--- 通知をタップすると自動で消えるようにする

        with(NotificationManagerCompat.from(this)) {
            notify(1, builder.build()) <--- 1はチャネルの識別番号
        }
    }

    private fun createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.0) {
            val name = "通知チャンネル"
            val description = "通知チャンネルの説明"
            val importance = NotificationManger.IMPORTANCE_DEFAULT
            val channel = NotificationChannel(CHANNEL_ID, name, importance).apply{
                description = description
            }
            val notificationManager : NotificationManager =
                getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(channel)
        }
    }
}
BACK