แสดงการแจ้งเตือนตามช่วงเวลา

แอปอาจต้องดึงดูดความสนใจของผู้ใช้อย่างเร่งด่วนในบางสถานการณ์ เช่น การปลุกที่กำลังดังหรือสายเรียกเข้า ในอุปกรณ์ที่ใช้ Android 9 (ระดับ API 28) หรือต่ำกว่า คุณอาจจัดการปัญหานี้ได้โดยการเปิดกิจกรรมขณะที่แอปทำงานในเบื้องหลัง เอกสารนี้แสดงวิธีทำให้เกิดลักษณะการทำงานนี้ในอุปกรณ์ที่ใช้ Android 10 (ระดับ API 29) (ระดับ API 29) ขึ้นไป

เพิ่มสิทธิ์ POST_NOTIFICATIONS

ตั้งแต่ Android 13 (API ระดับ 33) เป็นต้นไป ให้ประกาศสิทธิ์ POST_NOTIFICATIONS ในไฟล์ AndroidManifest.xml ดังนี้

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

หลังจากประกาศสิทธิ์แล้ว ให้สร้างช่องทางการแจ้งเตือน

สร้างช่องทางการแจ้งเตือน

สร้างช่องทางการแจ้งเตือนเพื่อแสดงการแจ้งเตือนและให้ผู้ใช้จัดการหมวดหมู่การแจ้งเตือนในการตั้งค่าระบบ ดูข้อมูลเพิ่มเติมเกี่ยวกับ ช่องการแจ้งเตือนได้ที่สร้างและจัดการช่องการแจ้งเตือน

สร้างช่องทางการแจ้งเตือนในเมธอด onCreate ของคลาส Application ดังนี้

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        val channel = NotificationChannel(
            CHANNEL_ID,
            "High priority notifications",
            NotificationManager.IMPORTANCE_HIGH
        )

        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(channel)
    }
}

เมื่อผู้ใช้เรียกใช้แอปเป็นครั้งแรก ระบบจะแสดงแชแนลในหน้าจอข้อมูลแอป ดังที่แสดงในรูปที่ 1

หน้าจอการแจ้งเตือนข้อมูลแอปที่แสดงช่องที่สร้างขึ้น
รูปที่ 1 ส่วนการแจ้งเตือนในหน้าข้อมูล แอปของการตั้งค่าระบบของแอป

จัดการสิทธิ์การแจ้งเตือน

ตั้งแต่ Android 13 เป็นต้นไป ให้ขอสิทธิ์การแจ้งเตือนก่อน แสดงการแจ้งเตือนต่อผู้ใช้

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีขอสิทธิ์การแจ้งเตือนรันไทม์ใน Jetpack Compose

val permissionLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.RequestPermission(),
    onResult = { hasNotificationPermission = it }
)
// ...
Button(
    onClick = {
        if (!hasNotificationPermission) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
            }
        }
    },
) {
    Text(text = "Request permission")
}

ในอุปกรณ์ที่ใช้ Android 13 ขึ้นไป การแตะปุ่มขอสิทธิ์จะแสดงกล่องโต้ตอบของระบบตามที่แสดงในรูปที่ 2

กล่องโต้ตอบของระบบที่แจ้งให้ผู้ใช้อนุญาตการแจ้งเตือน
รูปที่ 2 กล่องโต้ตอบของระบบสำหรับคำขอสิทธิ์ การแจ้งเตือน

เมื่อผู้ใช้ให้สิทธิ์ ระบบจะอัปเดตหน้าจอข้อมูลแอป ดังที่แสดงในรูปที่ 3

หน้าจอข้อมูลแอปแสดงสิทธิ์การแจ้งเตือนที่ได้รับ
รูปที่ 3 สิทธิ์การแจ้งเตือนได้รับอนุมัติแล้ว

สร้างการแจ้งเตือนที่มีลำดับความสำคัญสูง

เมื่อสร้างการแจ้งเตือนที่มีลำดับความสำคัญสูง ให้ระบุชื่อและข้อความที่ชัดเจน นอกจากนี้ ให้กำหนดช่องทางที่มีความสำคัญสูงและระดับลำดับความสำคัญด้วย

ตัวอย่างโค้ดต่อไปนี้จะกําหนดค่าและสร้างการแจ้งเตือนที่มีลําดับความสําคัญสูง

private fun showNotification() {
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    val notificationBuilder =
        NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.baseline_auto_awesome_24)
            .setContentTitle("HIGH PRIORITY")
            .setContentText("Check this dog puppy video NOW!")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION)

    notificationManager.notify(0, notificationBuilder.build())
}

แสดงการแจ้งเตือนต่อผู้ใช้

การเรียกใช้ฟังก์ชัน showNotification จะทริกเกอร์การแจ้งเตือนดังนี้

Button(onClick = { showNotification() }) {
    Text(text = "Show notification")
}

รูปที่ 4 แสดงการแจ้งเตือนที่มีลำดับความสำคัญสูงซึ่งระบบแสดง

การแจ้งเตือนที่มีลำดับความสำคัญสูงซึ่งแสดงบนอุปกรณ์
รูปที่ 4 การแจ้งเตือนที่มีลำดับความสำคัญสูง

การแจ้งเตือนต่อเนื่อง

เมื่อคุณแสดงการแจ้งเตือนต่อผู้ใช้ ผู้ใช้จะรับทราบหรือปิด การแจ้งเตือนหรือการช่วยเตือนของแอปได้ เช่น ผู้ใช้สามารถรับหรือปฏิเสธสายโทรศัพท์ขาเข้าได้

หากการแจ้งเตือนแสดงถึงงานเบื้องหลังที่กำลังดำเนินการอยู่ เช่น สายโทรศัพท์ที่ใช้งานอยู่ ให้เชื่อมโยงการแจ้งเตือนกับบริการที่ทำงานอยู่เบื้องหน้า ข้อมูลโค้ดต่อไปนี้แสดงวิธีแสดงการแจ้งเตือนที่เชื่อมโยงกับ บริการที่ทำงานอยู่เบื้องหน้า

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification)

พิจารณาใช้ข้อมูลอัปเดตแบบเรียลไทม์

การแจ้งเตือนที่ดำเนินการอยู่ซึ่งคำนึงถึงเวลาจะได้รับประโยชน์จากการมองเห็นที่เพิ่มขึ้น พิจารณาโปรโมตการแจ้งเตือนที่ดำเนินการอยู่เป็นข้อมูลอัปเดตแบบเรียลไทม์เพื่อแสดงข้อมูลสถานะ ในส่วนต่างๆ ของ UI ระบบ