แอปของคุณอาจต้องได้รับความสนใจจากผู้ใช้อย่างเร่งด่วนในบางสถานการณ์ เช่น การปลุกที่กำลังดำเนินอยู่หรือสายเรียกเข้า ในแอปที่กำหนดเป้าหมายอุปกรณ์ที่ทำงาน Android 9 (API ระดับ 28) หรือเวอร์ชันก่อนหน้า คุณอาจต้องจัดการเรื่องนี้โดยการเปิดตัว กิจกรรมในขณะที่แอปอยู่ในเบื้องหลัง เอกสารนี้แสดงวิธีสร้าง ลักษณะการทํางานนี้ในอุปกรณ์ที่ใช้ Android 10 (API ระดับ 29) เพื่อ Android 13 (API ระดับ 33)
เพิ่มสิทธิ์ POST_NOTIFICATIONS
เริ่มตั้งแต่ Android 13 ให้เพิ่มบรรทัดต่อไปนี้ลงใน
AndroidManifest.xml
ไฟล์:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
หลังจากมีลิงก์แล้ว คุณจะสร้างช่องทางการแจ้งเตือนได้
สร้างช่องทางการแจ้งเตือน
สร้างช่องทางการแจ้งเตือนเพื่อแสดงการแจ้งเตือนอย่างเหมาะสมและให้ ผู้ใช้สามารถจัดการการแจ้งเตือนในการตั้งค่าแอปได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ ช่องทางการแจ้งเตือน โปรดดูหัวข้อสร้างและจัดการการแจ้งเตือน ช่อง
สร้างช่องทางการแจ้งเตือนในชั้นเรียนของ Application
เมธอด onCreate
:
Kotlin
class DACapp : 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 ในหน้าจอระบบข้อมูลแอปของแอป ให้ทำดังนี้
![รูปภาพแสดงข้อมูลแอป ซึ่งเป็นหน้าจอการแจ้งเตือนของแอป](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification_channel_empty.png?hl=th)
จัดการสิทธิ์การแจ้งเตือน
ตั้งแต่ Android 13 เป็นต้นไป ให้ขอสิทธิ์การแจ้งเตือนก่อน แสดงการแจ้งเตือนแก่ผู้ใช้
การใช้งานขั้นต่ำจะมีลักษณะดังนี้
Kotlin
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 การแตะปุ่ม Request
permission
จะเป็นการทริกเกอร์กล่องโต้ตอบที่แสดงในรูปที่ 2 ดังนี้
![รูปภาพแสดงกล่องโต้ตอบขอสิทธิ์](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification_permission_request_dialog.png?hl=th)
หากผู้ใช้ยอมรับคำขอสิทธิ์ ส่วนข้อมูลแอปของแอปจะปรากฏขึ้น เหมือนรูปที่ 3:
![รูปภาพแสดงหน้าจอข้อมูลแอปหลังจากได้รับคำขอสิทธิ์การแจ้งเตือน](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification_permission_granted.png?hl=th)
สร้างการแจ้งเตือนที่มีลำดับความสำคัญสูง
เมื่อสร้างการแจ้งเตือน ให้ใส่ชื่อและข้อความที่สื่อความหมาย
ตัวอย่างต่อไปนี้มีการแจ้งเตือน
Kotlin
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(666, notificationBuilder.build()) }
แสดงการแจ้งเตือนแก่ผู้ใช้
การเรียกฟังก์ชัน showNotification()
จะทำให้มีการแจ้งเตือนดังนี้
Kotlin
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
การแจ้งเตือนในตัวอย่างนี้มีลักษณะเป็นรูปที่ 4
![รูปภาพแสดงการแจ้งเตือนที่มีลำดับความสำคัญสูง](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification.png?hl=th)
การแจ้งเตือนต่อเนื่อง
เมื่อคุณแสดงการแจ้งเตือนแก่ผู้ใช้ ผู้ใช้รายนั้นจะรับทราบหรือปิดการแจ้งเตือนได้ การแจ้งเตือนหรือการช่วยเตือนของแอป เช่น ผู้ใช้สามารถยอมรับหรือปฏิเสธ สายเรียกเข้า
หากการแจ้งเตือนเป็นการแจ้งเตือนอย่างต่อเนื่อง เช่น มีสายเรียกเข้า เชื่อมโยงการแจ้งเตือนกับเบื้องหน้า service [บริการ] ข้อมูลโค้ดต่อไปนี้ แสดงวิธีแสดงการแจ้งเตือนที่เชื่อมโยงกับบริการที่ทำงานอยู่เบื้องหน้า
Kotlin
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification)
Java
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification);