แสดงจำนวนการแจ้งเตือนบนไอคอนแอป (Badge Count)
ตัวอย่างนี้สาธิตวิธีแสดงตัวเลขนับจำนวนการแจ้งเตือนบนไอคอนแอปใน Launcher (Notification Badge) โดยใช้ NotificationCompat.setNumber() ใน Kotlin
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
สร้างโปรเจกต์ Android ใหม่ใน Android Studio
ขั้นตอนที่ 2: เลย์เอาต์ (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:text="Tutorials Point"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="32sp"
android:textStyle="bold" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:onClick="createNotification"
android:text="create notification" />
</RelativeLayout>
ขั้นตอนที่ 3: โค้ดสร้าง Notification (src/MainActivity.kt)
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.NotificationCompat
class MainActivity : AppCompatActivity() {
private var count = 0
private val channelId = "10001"
private val defaultChannelId = "default"
override fun onResume() {
super.onResume()
count = 0 // รีเซ็ตเมื่อกลับมาที่แอป
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
}
fun createNotification(view: View) {
count++
val notificationIntent = Intent(applicationContext, MainActivity::class.java).apply {
putExtra("fromNotification", true)
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
}
val pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val builder = NotificationCompat.Builder(applicationContext, defaultChannelId).apply {
setContentTitle("My Notification")
setContentIntent(pendingIntent)
setContentText("Notification Listener Service Example")
setSmallIcon(R.drawable.ic_launcher_foreground)
setAutoCancel(true)
setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL)
setNumber(count) // ตั้งค่าตัวเลข Badge
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val importance = NotificationManager.IMPORTANCE_HIGH
val notificationChannel = NotificationChannel(channelId, "NOTIFICATION_CHANNEL_NAME", importance)
builder.setChannelId(channelId)
notificationManager.createNotificationChannel(notificationChannel)
}
notificationManager.notify(System.currentTimeMillis().toInt(), builder.build())
}
}
ขั้นตอนที่ 4: Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.q11">
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
หมายเหตุ
- Badge รองรับขึ้นอยู่กับ Launcher ของแต่ละยี่ห้อ (Samsung One UI, Pixel Launcher, Nova Launcher, etc.)
- บาง Launcher ต้องเปิดการตั้งค่า Badge ให้แอปใน Settings
- Android 8.0+ (API 26) ต้องสร้าง Notification Channel
- ใช้
setNumber()สำหรับ Badge แบบดั้งเดิม