6 Temmuz 2020 Pazartesi

Kotlin-12 (Android Kotlin Local Notification - Kotlin ile lokal bildirim)

Merhaba,
bu yazı Kotlin ile geliştirilen bir Android uygulamasında lokal bildirimin(notification) nasıl gönderileceği paylaşılmıştır. İlk adımda bir Android projesi oluşturularak uygulamaya bir buton eklenmiştir. Bu butona basınca lokal bildirim tetiklenerek hayata geçirilmiştir. Aşağıdaki adımları takip ederek projenize lokal bildirimi uygulayabilirsiniz.

İlk olarak Android Studio ile bir Android projesi oluşturun.

activity_main.xml e Button ekleyin. Bu butona tıklayınca local bildirim tetiklenecektir. activity_main.xml dosyasının içeriği aşağıdaki gibi olacaktır. 


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
android:id="@+id/notificationBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Create Notification"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 ikinci adımda ise "src/main/res/mipmap" dizinine "mipmap-xhdpi/notify.png" adında bir bildirim iconu eklenmiştir.

Son adım işlemleri ise "MainActivity.kt" class'ında olacaktır. Bildirim tetikleyecek olan button'a onClickListener set edilir. NotificationBuilder ile bildirimin başlık, açıklama icon gibi bilgileri doldurulur. NotificationChannel üzerinden titreşim ve renk bilgileri tanımlanır. Son aşamada NotificationManager'ın notify(...) methodu çağrılarak bildirim tetiklenir. MainActivity.kt dosyasının içeriği aşağıdaki gibi olacaktır.



class MainActivity : AppCompatActivity() {

lateinit var manager: NotificationManager
lateinit var channel: NotificationChannel
lateinit var notificationBuilder: Notification.Builder

private val channelId: String = "com.tutorials.localnotification"
private val description: String = "Notification Sample Description"
private val notoficationId = 1001
private val requestCode = 1002

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

manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

notificationBtn.setOnClickListener {

val intent = Intent(this, LauncherActivity::class.java)
val pendingIntent = PendingIntent
.getActivity(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT)


val notificationTitle = "some notification title"
val notificationContent = "some notification text"

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//auto generated by idea
channel = NotificationChannel(channelId, description,
NotificationManager.IMPORTANCE_HIGH)
channel.enableLights(true)
channel.lightColor = Color.BLUE
channel.enableVibration(true)

manager.createNotificationChannel(channel)

notificationBuilder = Notification.Builder(this, channelId)
.setContentTitle(notificationTitle)
.setContentText(notificationContent)
.setSmallIcon(R.mipmap.notify)
.setLargeIcon(BitmapFactory.decodeResource(resources, R.mipmap.notify))
.setContentIntent(pendingIntent)
} else {
notificationBuilder = Notification.Builder(this)
.setContentTitle(notificationTitle)
.setContentText(notificationContent)
.setSmallIcon(R.mipmap.notify)
.setLargeIcon(BitmapFactory.decodeResource(resources,R.mipmap.notify))
.setContentIntent(pendingIntent)
}

manager.notify(notoficationId, notificationBuilder.build())
}
}
}

 


NOT1: NotificationManager, NotificationChannel ve NotificationBuilder lateinit olarak tanımlanmıştır. Bu class lar ButtonClick işleminden sonra initialize edilecektir.



lateinit var manager: NotificationManager
lateinit var channel: NotificationChannel
lateinit var notificationBuilder: Notification.Builder

 

 

NOT2: API versiyon 26 ve üzeri için NotificationBuilder deprecate edilmiştir. Dolayısıyla uygulamada 26 versiyon öncesi ve sonrası için ayrı işlem yapılmıştır.



if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//auto generated by idea
//...
notificationBuilder = Notification.Builder(this, channelId)
.setContentTitle(notificationTitle)
.setContentText(notificationContent)
.setSmallIcon(R.mipmap.notify)
.setLargeIcon(BitmapFactory.decodeResource(resources, R.mipmap.notify))
.setContentIntent(pendingIntent)
} else {
notificationBuilder = Notification.Builder(this)
.setContentTitle(notificationTitle)
.setContentText(notificationContent)
.setSmallIcon(R.mipmap.notify)
.setLargeIcon(BitmapFactory.decodeResource(resources,R.mipmap.notify))
.setContentIntent(pendingIntent)
}


 

uygulamanın kaynak kodlarına aşağıdan erişebilirsiniz.
github: https://github.com/lvntyldz/tutorials/tree/master/kotlin-android-app-examples/12-local-notification




Hiç yorum yok:

Yorum Gönder