ตั้งแต่ Android 8.0 (ระดับ API 26) เป็นต้นไป การแจ้งเตือนทั้งหมดต้องได้รับการกำหนดให้กับช่องทาง คุณสามารถตั้งค่าลักษณะการทำงานด้านภาพและเสียงสำหรับแต่ละแชแนล ซึ่งจะมีผลกับการแจ้งเตือนทั้งหมดในแชแนลนั้น ผู้ใช้สามารถเปลี่ยนการตั้งค่าเหล่านี้และตัดสินใจว่าช่องทางการแจ้งเตือนใดจากแอปของคุณที่อาจรบกวนหรือมองเห็นได้
ดูภาพรวมของช่องทางและฟีเจอร์การแจ้งเตือนอื่นๆ ใน Android 8.0 ได้จากวิดีโอต่อไปนี้
การตั้งค่าของผู้ใช้สำหรับช่องทางการแจ้งเตือนจะพร้อมใช้งานสำหรับแต่ละแอปในการตั้งค่าระบบ ดังที่แสดงในรูปที่ 1
หลังจากสร้างช่องทางการแจ้งเตือนแล้ว คุณจะเปลี่ยนลักษณะการทำงานของการแจ้งเตือนไม่ได้ ผู้ใช้จะควบคุมได้อย่างเต็มที่ ณ จุดนั้น อย่างไรก็ตาม คุณยังคงเปลี่ยนชื่อและคำอธิบายของช่องได้
สร้างช่องทางสำหรับการแจ้งเตือนแต่ละประเภทที่คุณต้องการส่ง นอกจากนี้ คุณยังสร้างแชแนลการแจ้งเตือนเพื่อแสดงตัวเลือกที่ผู้ใช้เลือกได้ด้วย ตัวอย่างเช่น คุณสามารถตั้งค่าช่องทางการแจ้งเตือนแยกต่างหากสำหรับกลุ่มการสนทนาแต่ละกลุ่มที่ผู้ใช้สร้างขึ้นในแอปรับส่งข้อความ
เมื่อกำหนดเป้าหมายเป็น Android 8.0 (ระดับ API 26) ขึ้นไป คุณต้องใช้ช่องทางการแจ้งเตือนอย่างน้อย 1 ช่องทาง หากตั้งค่า targetSdkVersion เป็น 25 หรือต่ำกว่า เมื่อแอปทำงานใน Android 8.0 (ระดับ API 26) ขึ้นไป แอปจะทำงานเหมือนกับในอุปกรณ์ที่ใช้ Android 7.1 (ระดับ API 25) หรือต่ำกว่า
สร้างช่องทางการแจ้งเตือน
หากต้องการสร้างแชแนลการแจ้งเตือน ให้ทำตามขั้นตอนต่อไปนี้
สร้างออบเจ็กต์
NotificationChannelที่มีรหัสช่องทางที่ไม่ซ้ำกัน ชื่อที่ผู้ใช้มองเห็นได้ และระดับความสำคัญระบุคำอธิบายที่ผู้ใช้เห็นในการตั้งค่าระบบด้วย
setDescription()(ไม่บังคับ)ลงทะเบียนช่องทางการแจ้งเตือนโดยส่งไปยัง
createNotificationChannel()
ตัวอย่างต่อไปนี้แสดงวิธีสร้างและลงทะเบียนช่องทางการแจ้งเตือน
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val importance = NotificationManager.IMPORTANCE_DEFAULT val mChannel = NotificationChannel(CHANNEL_ID, name, importance) mChannel.description = descriptionText // Register the channel with the system. You can't change the importance // or other notification behaviors after this. val notificationManager = context.getSystemService(NotificationManager::class.java) notificationManager?.createNotificationChannel(mChannel) }
การสร้างช่องทางการแจ้งเตือนที่มีอยู่แล้วขึ้นมาใหม่ด้วยค่าเดิมจะไม่ดำเนินการใดๆ ดังนั้นคุณจึงเรียกใช้โค้ดนี้ได้อย่างปลอดภัยเมื่อเริ่มแอป
โดยค่าเริ่มต้น การแจ้งเตือนทั้งหมดที่โพสต์ไปยังแชแนลหนึ่งๆ จะใช้ลักษณะการทำงานด้านภาพและเสียงที่กำหนดโดยระดับความสำคัญจากคลาส NotificationManagerCompat เช่น IMPORTANCE_DEFAULT หรือ IMPORTANCE_HIGH ดูข้อมูลเพิ่มเติมเกี่ยวกับระดับความสำคัญได้ในส่วนถัดไป
หากต้องการปรับแต่งลักษณะการทำงานของการแจ้งเตือนเริ่มต้นของช่องเพิ่มเติม คุณสามารถเรียกใช้เมธอดต่างๆ เช่น enableLights(), setLightColor() และ setVibrationPattern() ใน NotificationChannel โปรดทราบว่าเมื่อสร้างช่องแล้ว คุณจะเปลี่ยนการตั้งค่าเหล่านี้ไม่ได้ และผู้ใช้มีสิทธิ์ควบคุมขั้นสุดท้ายว่าจะเปิดใช้ลักษณะการทำงานเหล่านี้หรือไม่
นอกจากนี้ คุณยังสร้างช่องทางการแจ้งเตือนหลายช่องทางในการดำเนินการเดียวได้โดยเรียกใช้ createNotificationChannels()
ตั้งค่าระดับความสำคัญ
ความสำคัญของแชแนลจะส่งผลต่อระดับการรบกวนของการแจ้งเตือนทั้งหมดที่โพสต์ในแชแนล ระบุในเครื่องมือสร้าง NotificationChannel โดยใช้ระดับความสำคัญ 1 ใน 5 ระดับ ตั้งแต่ IMPORTANCE_NONE(0) ถึง IMPORTANCE_HIGH(4)
หากต้องการรองรับอุปกรณ์ที่ใช้ Android 7.1 (ระดับ API 25) หรือต่ำกว่า คุณต้องเรียกใช้ setPriority() สำหรับการแจ้งเตือนแต่ละรายการด้วย โดยใช้ค่าคงที่ลำดับความสำคัญจากคลาส NotificationCompat
ค่าคงที่ความสำคัญ (NotificationManager.IMPORTANCE_*) และลำดับความสำคัญ (NotificationCompat.PRIORITY_*) จะแมปกับตัวเลือกความสำคัญที่ผู้ใช้มองเห็นได้ ดังที่แสดงในตารางต่อไปนี้
| ระดับความสำคัญที่ผู้ใช้มองเห็น | ความสำคัญ (Android 8.0 ขึ้นไป) | ลำดับความสำคัญ (Android 7.1 และต่ำกว่า) |
|---|---|---|
| เร่งด่วน ส่งเสียงและปรากฏเป็นการแจ้งเตือนล่วงหน้า |
IMPORTANCE_HIGH |
PRIORITY_HIGH หรือ PRIORITY_MAX |
| สูง ส่งเสียง |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| ปานกลาง ไม่มีเสียง |
IMPORTANCE_LOW |
PRIORITY_LOW |
| ต่ำ ไม่ส่งเสียงและไม่ปรากฏในแถบสถานะ |
IMPORTANCE_MIN |
PRIORITY_MIN |
| ไม่มี ไม่ส่งเสียงและไม่ปรากฏในแถบสถานะหรือหน้าต่างแจ้งเตือน |
IMPORTANCE_NONE |
N/A |
การแจ้งเตือนทั้งหมดจะปรากฏในตำแหน่ง UI ของระบบที่ไม่รบกวนการทำงาน เช่น ในแถบแจ้งเตือนและเป็นป้ายบนไอคอน Launcher ไม่ว่าจะมีความสำคัญระดับใดก็ตาม แต่คุณสามารถแก้ไขลักษณะที่ปรากฏของป้ายการแจ้งเตือนได้
เมื่อส่งช่องไปยัง NotificationManager แล้ว คุณจะเปลี่ยนระดับความสำคัญไม่ได้ อย่างไรก็ตาม ผู้ใช้สามารถเปลี่ยนค่ากำหนดสำหรับช่องทางของแอปได้ทุกเมื่อ
ดูข้อมูลเกี่ยวกับการเลือกระดับความสำคัญที่เหมาะสมได้ที่ "ระดับความสำคัญ" ในคู่มือการออกแบบการแจ้งเตือน
อ่านการตั้งค่าช่องทางการแจ้งเตือน
ผู้ใช้สามารถแก้ไขการตั้งค่าสำหรับแชแนลการแจ้งเตือน รวมถึงลักษณะการทำงาน เช่น การสั่นและเสียงเตือน หากต้องการทราบการตั้งค่าที่ผู้ใช้ใช้กับช่องทางการแจ้งเตือนของคุณ ให้ทำตามขั้นตอนต่อไปนี้
รับออบเจ็กต์
NotificationChannelโดยเรียกใช้getNotificationChannel()หรือgetNotificationChannels()ค้นหาการตั้งค่าช่องที่เฉพาะเจาะจง เช่น
getVibrationPattern(),getSound()และgetImportance()
หากตรวจพบการตั้งค่าช่องทางที่คุณเชื่อว่าขัดขวางลักษณะการทำงานที่ต้องการสำหรับแอป คุณสามารถแนะนำให้ผู้ใช้เปลี่ยนการตั้งค่าดังกล่าวและระบุการดำเนินการเพื่อเปิดการตั้งค่าช่องทางได้ ดังที่แสดงในส่วนถัดไป
เปิดการตั้งค่าช่องทางการแจ้งเตือน
หลังจากสร้างช่องทางการแจ้งเตือนแล้ว คุณจะเปลี่ยนลักษณะการทำงานด้านภาพและเสียงของช่องทางการแจ้งเตือนแบบเป็นโปรแกรมไม่ได้ มีเพียงผู้ใช้เท่านั้นที่เปลี่ยนลักษณะการทำงานของช่องได้จากการตั้งค่าระบบ หากต้องการให้ผู้ใช้เข้าถึงการตั้งค่าการแจ้งเตือนเหล่านี้ได้อย่างรวดเร็ว ให้เพิ่มรายการใน UI การตั้งค่าของแอปที่เปิดการตั้งค่าระบบเหล่านี้
คุณสามารถเปิดการตั้งค่าระบบสำหรับช่องทางการแจ้งเตือนด้วย Intent ที่ใช้การดำเนินการ ACTION_CHANNEL_NOTIFICATION_SETTINGS
ตัวอย่างเช่น โค้ดตัวอย่างต่อไปนี้แสดงวิธีเปลี่ยนเส้นทางผู้ใช้ไปยังการตั้งค่าสำหรับช่องทางการแจ้งเตือน
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID) } Button(onClick = { context.startActivity(intent) }) { Text("Open Channel Settings") }
โปรดทราบว่า Intent ต้องมีข้อมูลเพิ่มเติม 2 รายการที่ระบุชื่อแพ็กเกจของแอป (หรือที่เรียกว่ารหัสแอปพลิเคชัน) และช่องที่จะแก้ไข
ลบช่องทางการแจ้งเตือน
คุณลบแชแนลการแจ้งเตือนได้โดยเรียกใช้ deleteNotificationChannel()
โค้ดตัวอย่างต่อไปนี้แสดงวิธีทำขั้นตอนนี้ให้เสร็จสมบูรณ์
val notificationManager = ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java) notificationManager?.deleteNotificationChannel(channelId)
สร้างกลุ่มช่องทางการแจ้งเตือน
หากต้องการจัดระเบียบลักษณะที่ปรากฏของแชแนลใน UI การตั้งค่าเพิ่มเติม คุณสามารถสร้างกลุ่มแชแนลได้ วิธีนี้เหมาะสำหรับแอปที่รองรับบัญชีผู้ใช้หลายบัญชี เนื่องจากช่วยให้คุณสร้างกลุ่มแชแนลการแจ้งเตือนสำหรับแต่ละบัญชีได้ กลุ่มแชแนลช่วยให้ผู้ใช้แยกความแตกต่างและควบคุมแชแนลการแจ้งเตือนหลายรายการที่มีชื่อเหมือนกันได้
ตัวอย่างเช่น แอปโซเชียลเน็ตเวิร์กอาจรองรับทั้งบัญชีส่วนตัวและบัญชีงาน ในสถานการณ์นี้ แต่ละบัญชีอาจต้องใช้ช่องทางการแจ้งเตือนหลายช่องทางที่มีฟังก์ชันและชื่อเหมือนกัน เช่น
บัญชีส่วนตัวที่มี 2 ช่อง:
ความคิดเห็นใหม่
คำแนะนำเกี่ยวกับโพสต์
บัญชีธุรกิจที่มี 2 ช่อง:
ความคิดเห็นใหม่
คำแนะนำเกี่ยวกับโพสต์
การจัดระเบียบแชแนลการแจ้งเตือนเป็นกลุ่มสำหรับแต่ละบัญชีจะช่วยให้ผู้ใช้แยกแยะแชแนลต่างๆ ได้
กลุ่มแชแนลการแจ้งเตือนแต่ละกลุ่มต้องมีรหัสซึ่งต้องไม่ซ้ำกันภายในแพ็กเกจของคุณ รวมถึงชื่อที่ผู้ใช้มองเห็นได้ ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างกลุ่มแชแนลการแจ้งเตือน
fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) { val notificationManager = ContextCompat.getSystemService(context, NotificationManager::class.java) notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName)) }
หลังจากสร้างกลุ่มใหม่แล้ว คุณสามารถเรียกใช้
setGroup()
เพื่อเชื่อมโยงออบเจ็กต์ NotificationChannel ใหม่กับกลุ่มได้
เมื่อส่งช่องทางไปยังเครื่องมือจัดการการแจ้งเตือนแล้ว คุณจะเปลี่ยนการเชื่อมโยงระหว่างช่องทางการแจ้งเตือนกับกลุ่มไม่ได้