Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีแสดงจำนวนการแจ้งเตือน (Notification Badge) บนไอคอนแอป Android ด้วย Kotlin

แสดงจำนวนการแจ้งเตือนบนไอคอนแอป (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 แบบดั้งเดิม