เริ่มตั้งแต่ Android 8.0 (API ระดับ 26) เป็นต้นไป การแจ้งเตือนทั้งหมดจะต้องมีการกำหนดให้แก่ช่องทาง คุณสามารถตั้งค่าลักษณะการทำงานของภาพและเสียงสำหรับแต่ละช่องได้ ซึ่งจะ ใช้กับการแจ้งเตือนทั้งหมดในช่องนั้น ผู้ใช้สามารถเปลี่ยนการตั้งค่าเหล่านี้ และตัดสินใจได้ว่าช่องทางการแจ้งเตือนใดจากแอปของคุณที่อาจรบกวนหรือ มองเห็นได้
ดูภาพรวมของช่องทางและฟีเจอร์การแจ้งเตือนอื่นๆ ใน Android 8.0 ได้ในวิดีโอต่อไปนี้
การตั้งค่าผู้ใช้สำหรับช่องทางการแจ้งเตือนจะพร้อมใช้งานสำหรับแต่ละแอปในการตั้งค่าระบบ ดังที่แสดงในรูปที่ 1
 
รูปที่ 1 การตั้งค่าการแจ้งเตือนสำหรับแอปนาฬิกา และช่องทางหนึ่งของแอปนั้น
หลังจากสร้างแชแนลการแจ้งเตือนแล้ว คุณจะเปลี่ยนลักษณะการทำงานของการแจ้งเตือนไม่ได้ ผู้ใช้จะมีสิทธิ์ควบคุมอย่างเต็มที่ในจุดนั้น อย่างไรก็ตาม คุณยังคงเปลี่ยนชื่อและคำอธิบายของช่องได้
สร้างแชแนลสำหรับการแจ้งเตือนแต่ละประเภทที่คุณต้องการส่ง นอกจากนี้ คุณยังสร้างช่องทางการแจ้งเตือนเพื่อแสดงตัวเลือกที่ผู้ใช้เลือกได้ด้วย เช่น คุณสามารถตั้งค่าช่องทางการแจ้งเตือนแยกต่างหากสำหรับแต่ละกลุ่มการสนทนาแต่ละกลุ่มที่ผู้ใช้สร้างขึ้นในแอปรับส่งข้อความ
เมื่อกำหนดเป้าหมายเป็น Android 8.0 (API ระดับ 26) ขึ้นไป คุณต้องใช้ช่องทางการแจ้งเตือนอย่างน้อย 1 ช่อง หาก targetSdkVersion ตั้งค่าเป็น 25 หรือต่ำกว่า
เมื่อแอปทำงานบน Android 8.0 (API ระดับ 26) ขึ้นไป แอปจะทำงานเหมือนกับ
ในอุปกรณ์ที่ใช้ Android 7.1 (API ระดับ 25) หรือต่ำกว่า
สร้างช่องทางการแจ้งเตือน
หากต้องการสร้างแชแนลการแจ้งเตือน ให้ทำตามขั้นตอนต่อไปนี้
- สร้างออบเจ็กต์ - NotificationChannelที่มีรหัสแชแนลที่ไม่ซ้ำกัน ชื่อที่ผู้ใช้มองเห็น และระดับความสําคัญ
- (ไม่บังคับ) ระบุคำอธิบายที่ผู้ใช้เห็นในการตั้งค่าระบบ ด้วย - setDescription()
- ลงทะเบียนช่องทางการแจ้งเตือนโดยส่งไปยัง - createNotificationChannel()
ตัวอย่างต่อไปนี้แสดงวิธีสร้างและลงทะเบียนช่องการแจ้งเตือน
Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val name = getString(R.string.channel_name) val descriptionText = getString(R.string.channel_description) 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 = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(mChannel) }
Java
private void createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = getString(R.string.channel_name); String description = getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); channel.setDescription(description); // Register the channel with the system. You can't change the importance // or other notification behaviors after this. NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } }
การสร้างช่องทางการแจ้งเตือนที่มีอยู่แล้วด้วยค่าเดิมจะไม่ดำเนินการใดๆ ดังนั้นคุณจึงเรียกใช้โค้ดนี้ได้อย่างปลอดภัยเมื่อเริ่มต้นแอป
โดยค่าเริ่มต้น การแจ้งเตือนทั้งหมดที่โพสต์ในแชแนลหนึ่งๆ จะใช้ลักษณะการทำงานด้านภาพและเสียงที่กำหนดโดยระดับความสำคัญจากคลาส
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
ตัวอย่างเช่น โค้ดตัวอย่างต่อไปนี้แสดงวิธีเปลี่ยนเส้นทางผู้ใช้ไปยัง การตั้งค่าสำหรับช่องทางการแจ้งเตือน
Kotlin
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, packageName) putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()) } startActivity(intent)
Java
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()); startActivity(intent);
โปรดทราบว่า Intent ต้องมี 2 ส่วนเพิ่มเติมที่ระบุชื่อแพ็กเกจของแอป (หรือที่เรียกว่ารหัสแอปพลิเคชัน) และช่องที่จะแก้ไข
ลบช่องทางการแจ้งเตือน
คุณลบช่องทางการแจ้งเตือนได้โดยเรียกใช้
deleteNotificationChannel()
โค้ดตัวอย่างต่อไปนี้แสดงวิธีทําขั้นตอนนี้ให้เสร็จสมบูรณ์
Kotlin
// The id of the channel. val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val id: String = "my_channel_01" notificationManager.deleteNotificationChannel(id)
Java
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // The id of the channel. String id = "my_channel_01"; notificationManager.deleteNotificationChannel(id);
สร้างกลุ่มช่องทางการแจ้งเตือน
หากต้องการจัดระเบียบลักษณะที่ปรากฏของแชแนลใน UI ของการตั้งค่าเพิ่มเติม คุณสามารถสร้างกลุ่มแชแนลได้ วิธีนี้เป็นแนวทางที่ดีเมื่อแอปของคุณรองรับบัญชีผู้ใช้หลายบัญชี เนื่องจากจะช่วยให้คุณสร้างกลุ่มช่องทางการแจ้งเตือนสำหรับแต่ละบัญชีได้ กลุ่มช่องจะช่วยให้ผู้ใช้แยกแยะและควบคุมช่องการแจ้งเตือนหลายช่องที่มีชื่อเหมือนกันได้
 
รูปที่ 2 การตั้งค่าแชแนลการแจ้งเตือนที่มี กลุ่มสำหรับบัญชีส่วนตัวและบัญชีงาน
เช่น แอปโซเชียลเน็ตเวิร์กอาจรองรับบัญชีส่วนตัวและบัญชีงาน ในสถานการณ์นี้ บัญชีแต่ละบัญชีอาจต้องใช้ช่องทางการแจ้งเตือนหลายช่องที่มีฟังก์ชันและชื่อเหมือนกัน เช่น
- บัญชีส่วนบุคคลที่มี 2 ช่อง - ความคิดเห็นใหม่ 
- คำแนะนำโพสต์ 
 
- บัญชีธุรกิจที่มี 2 ช่อง ได้แก่ - ความคิดเห็นใหม่ 
- คำแนะนำโพสต์ 
 
การจัดระเบียบช่องทางการแจ้งเตือนเป็นกลุ่มสำหรับแต่ละบัญชีช่วยให้ผู้ใช้แยกความแตกต่างระหว่างช่องทางการแจ้งเตือนได้
กลุ่มแชแนลการแจ้งเตือนแต่ละกลุ่มต้องมีรหัสที่ไม่ซ้ำกันภายในแพ็กเกจของคุณ รวมถึงชื่อที่ผู้ใช้มองเห็น ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างกลุ่มแชแนลการแจ้งเตือน
Kotlin
// The id of the group. val groupId = "my_group_01" // The user-visible name of the group. val groupName = getString(R.string.group_name) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
Java
// The id of the group. String groupId = "my_group_01"; // The user-visible name of the group. CharSequence groupName = getString(R.string.group_name); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
หลังจากสร้างกลุ่มใหม่แล้ว คุณสามารถเรียกใช้
setGroup()
เพื่อเชื่อมโยงออบเจ็กต์ NotificationChannel ใหม่กับกลุ่ม
เมื่อส่งช่องไปยังเครื่องมือจัดการการแจ้งเตือนแล้ว คุณจะเปลี่ยน การเชื่อมโยงระหว่างช่องการแจ้งเตือนกับกลุ่มไม่ได้
