Dicoding Developer Coaching merupakan webinar, yang membahas tuntas kendala maupun pertanyaan yang sering ditanyakan di Academy Dicoding.
Tema kali ini adalah "Cara Membuat Notifikasi di Aplikasi Androidmu."
Di sini Anda akan belajar mengenai komponen Notification. Dengan menggunakan Notification, kita dapat memberitahu user ketika ada informasi baru yang diperolehnya. Misalnya saat ada pesan masuk di WhatsApp, pemberitahuan di Facebook, dan lain-lain.
Ada beragam jenis notifikasi. Ada yang berupa pop-up, dan ada juga yang muncul di status bar perangkat kita.
2. Pesan yang tampil di luar aplikasi
Biasanya untuk reminder / info baru
Ketika di-tap bisa melakukan aksi tertentu
3. 1
2 3
5
4
Status Bar Lock Screen
Notification Drawer Heads-up Notification App icon badge
4. 1. Small Icon
2. App Name
3. Time stamp
4. Large Icon
5. Content Title
6. Content Text
5. val notifManager = context.getSystemService(Context.NOTIFICATION_SERVICE)
as NotificationManager
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher) //1
.setContentTitle("You've been notified!") //2
.setContentText("This is your notification text.") //3
val notification = builder.build()
notifManager.notify(NOTIFICATION_ID, notification)
7. ● Digunakan supaya pengguna bisa
menyesuaikan setiap jenis
notification yang akan ditampilkan.
● Satu channel bisa berisi lebih dari
satu notification.
● Anda bisa menyetel banyak
notification dalam 1 channel
sekaligus seperti prioritas, suara,
getar, cahaya dsb.
8. User-visible importance level
Importance (Android 8.0
and higher)
Priority (Android 7.1 and
lower)
Urgent
Makes a sound and appears as a heads-up notification
IMPORTANCE_HIGH
PRIORITY_HIGH or
PRIORITY_MAX
High
Makes a sound
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Medium
No sound
IMPORTANCE_LOW PRIORITY_LOW
Low
No sound and doesn't appear in the status bar
IMPORTANCE_MIN PRIORITY_MIN
9. // After create NotificationManager and Notification.Builder
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(CHANNEL_ID,
"Firing alarms & timers",
NotificationManager.IMPORTANCE_DEFAULT)
channel.enableVibration(true)
channel.vibrationPattern = longArrayOf(1000, 1000, 1000, 1000, 1000)
builder.setChannelId(CHANNEL_ID)
notifManager.createNotificationChannel(channel)
}
val notification = builder.build()
notifManager.notify(NOTIFICATION_ID, notification)
10. val intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://dicoding.com"))
// OR : val intent = Intent(this, MainActivity::class.java)
val pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT)
val builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentIntent(pendingIntent)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("You've been notified!")
.setContentText("This is your notification text.")
11. // Create the TaskStackBuilder
val resultIntent = Intent(this, ResultActivity::class.java)
val resultPendingIntent: PendingIntent? =
TaskStackBuilder.create(this).run {
// Add the intent, which inflates the back stack
addNextIntentWithParentStack(resultIntent)
// Get the PendingIntent containing the entire back stack
getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)
}
// AndroidManifest.xml
<activity
android:name=".ResultActivity"
android:parentActivityName=".MainActivity" />
12. val builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("You've been notified!")
.setContentText("This is your notification text.")
15. val androidImage = BitmapFactory.decodeResource(
resources,
R.drawable.mascot_1)
val notif = NotificationCompat.Builder(this)
.setContentTitle("New photo from " + sender.toString())
.setContentText(subject)
.setSmallIcon(R.drawable.new_post)
.setLargeIcon(androidImage)
.setStyle(NotificationCompat.BigPictureStyle()
.bigPicture(androidImage)
.setBigContentTitle("Large Notification Title"))
.build()
16. ● Update/cancel dengan panggil notify dengan id yang sama.
● Gunakan setAutoCancel() supaya ketika notif di-tap langsung hilang.
val mBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
.setAutoCancel(true)
...
notifManager.notify(NOTIFICATION_ID) //update
notifManager.cancel(NOTIFICATION_ID) //cancel
17. ● Relevant : Berikan informasi yang esensial saja
● Timely : Jangan sering-sering, nanti di-disable!
● Short : Gunakan kalimat sesingkat mungkin
● Power to choose : Kelompokkan channel supaya user bisa memilih