ボタンをクリックすると通知が出る
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)
}
}
}