Notifications
1. Giới thiệu
Phần tiêu đề “1. Giới thiệu”Notifications hiển thị thông tin cho user bên ngoài UI của app.
2. Setup
Phần tiêu đề “2. Setup”Permission (Android 13+)
Phần tiêu đề “Permission (Android 13+)”<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />Request Permission
Phần tiêu đề “Request Permission”if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { requestPermissions(arrayOf(Manifest.permission.POST_NOTIFICATIONS), 100) }}3. Notification Channel (Android 8+)
Phần tiêu đề “3. Notification Channel (Android 8+)”private fun createNotificationChannel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channel = NotificationChannel( "messages", "Messages", NotificationManager.IMPORTANCE_HIGH ).apply { description = "Chat message notifications" enableLights(true) lightColor = Color.BLUE enableVibration(true) }
val manager = getSystemService(NotificationManager::class.java) manager.createNotificationChannel(channel) }}Importance Levels
Phần tiêu đề “Importance Levels”| Level | Behavior |
|---|---|
| IMPORTANCE_HIGH | Heads-up |
| IMPORTANCE_DEFAULT | Sound |
| IMPORTANCE_LOW | No sound |
| IMPORTANCE_MIN | Silent |
4. Basic Notification
Phần tiêu đề “4. Basic Notification”fun showNotification(context: Context) { val notification = NotificationCompat.Builder(context, "messages") .setSmallIcon(R.drawable.ic_notification) .setContentTitle("New Message") .setContentText("You have a new message from Alice") .setPriority(NotificationCompat.PRIORITY_HIGH) .setAutoCancel(true) .build()
NotificationManagerCompat.from(context).notify(1, notification)}5. Notification với Action
Phần tiêu đề “5. Notification với Action”val intent = Intent(context, ChatActivity::class.java)val pendingIntent = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)
val replyIntent = PendingIntent.getBroadcast( context, 0, Intent(context, ReplyReceiver::class.java), PendingIntent.FLAG_MUTABLE)
val notification = NotificationCompat.Builder(context, "messages") .setSmallIcon(R.drawable.ic_message) .setContentTitle("New Message") .setContentText("Hello!") .setContentIntent(pendingIntent) .addAction(R.drawable.ic_reply, "Reply", replyIntent) .addAction(R.drawable.ic_mark_read, "Mark as Read", markReadIntent) .build()6. Big Text/Picture Style
Phần tiêu đề “6. Big Text/Picture Style”Big Text
Phần tiêu đề “Big Text”val notification = NotificationCompat.Builder(context, "news") .setSmallIcon(R.drawable.ic_news) .setContentTitle("Breaking News") .setContentText("Short preview...") .setStyle( NotificationCompat.BigTextStyle() .bigText("This is a much longer text that will be shown when the notification is expanded...") ) .build()Big Picture
Phần tiêu đề “Big Picture”val notification = NotificationCompat.Builder(context, "photos") .setSmallIcon(R.drawable.ic_photo) .setContentTitle("New Photo") .setStyle( NotificationCompat.BigPictureStyle() .bigPicture(bitmap) .bigLargeIcon(null as Bitmap?) ) .build()7. Progress Notification
Phần tiêu đề “7. Progress Notification”val builder = NotificationCompat.Builder(context, "downloads") .setSmallIcon(R.drawable.ic_download) .setContentTitle("Downloading...") .setPriority(NotificationCompat.PRIORITY_LOW)
val notificationManager = NotificationManagerCompat.from(context)
// Indeterminatebuilder.setProgress(0, 0, true)notificationManager.notify(1, builder.build())
// Determinatefor (progress in 0..100 step 10) { builder.setProgress(100, progress, false) notificationManager.notify(1, builder.build()) delay(500)}
// Completebuilder.setContentText("Download complete") .setProgress(0, 0, false)notificationManager.notify(1, builder.build())8. Messaging Style
Phần tiêu đề “8. Messaging Style”val person = Person.Builder().setName("Alice").build()
val notification = NotificationCompat.Builder(context, "messages") .setSmallIcon(R.drawable.ic_message) .setStyle( NotificationCompat.MessagingStyle(person) .addMessage("Hi!", System.currentTimeMillis(), person) .addMessage("How are you?", System.currentTimeMillis(), person) ) .build()9. Direct Reply
Phần tiêu đề “9. Direct Reply”val remoteInput = RemoteInput.Builder("key_text_reply") .setLabel("Reply...") .build()
val replyAction = NotificationCompat.Action.Builder( R.drawable.ic_reply, "Reply", replyPendingIntent) .addRemoteInput(remoteInput) .build()
val notification = NotificationCompat.Builder(context, "messages") .setSmallIcon(R.drawable.ic_message) .setContentTitle("New Message") .addAction(replyAction) .build()
// Receive reply in BroadcastReceiverval reply = RemoteInput.getResultsFromIntent(intent) ?.getCharSequence("key_text_reply") ?.toString()10. Grouped Notifications
Phần tiêu đề “10. Grouped Notifications”val GROUP_KEY = "com.example.MESSAGES"
// Individual notificationsmessages.forEach { message -> val notification = NotificationCompat.Builder(context, "messages") .setSmallIcon(R.drawable.ic_message) .setContentTitle(message.sender) .setContentText(message.text) .setGroup(GROUP_KEY) .build()
notificationManager.notify(message.id, notification)}
// Summary notificationval summary = NotificationCompat.Builder(context, "messages") .setSmallIcon(R.drawable.ic_message) .setContentTitle("${messages.size} new messages") .setStyle( NotificationCompat.InboxStyle() .addLine("Alice: Hi!") .addLine("Bob: Hello!") .setSummaryText("${messages.size} messages") ) .setGroup(GROUP_KEY) .setGroupSummary(true) .build()
notificationManager.notify(0, summary)11. Cancel Notification
Phần tiêu đề “11. Cancel Notification”// By IDnotificationManager.cancel(notificationId)
// AllnotificationManager.cancelAll()📝 Tóm tắt
Phần tiêu đề “📝 Tóm tắt”| Feature | API |
|---|---|
| Channel | NotificationChannel (Android 8+) |
| Permission | POST_NOTIFICATIONS (Android 13+) |
| Builder | NotificationCompat.Builder |
| Styles | BigTextStyle, BigPictureStyle, MessagingStyle |
| Actions | addAction() |
| Groups | setGroup(), setGroupSummary() |