เริ่มตั้งแต่ 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()
ตัวอย่างต่อไปนี้แสดงวิธีสร้างและลงทะเบียนช่องการแจ้งเตือน
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)
}
การสร้างช่องทางการแจ้งเตือนที่มีอยู่แล้วด้วยค่าเดิมจะไม่ดำเนินการใดๆ ดังนั้นคุณจึงเรียกใช้โค้ดนี้ได้อย่างปลอดภัยเมื่อเริ่มต้นแอป
โดยค่าเริ่มต้น การแจ้งเตือนทั้งหมดที่โพสต์ในช่องที่กำหนดจะใช้ลักษณะการทำงานด้านภาพและเสียงที่กำหนดโดยระดับความสำคัญจากคลาส 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, packageName)
putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
}
startActivity(intent)
โปรดทราบว่า Intent ต้องมีข้อมูลเพิ่มเติม 2 รายการที่ระบุชื่อแพ็กเกจของแอป (หรือที่เรียกว่ารหัสแอปพลิเคชัน) และช่องที่จะแก้ไข
ลบช่องทางการแจ้งเตือน
คุณลบช่องทางการแจ้งเตือนได้โดยเรียกใช้
deleteNotificationChannel()
โค้ดตัวอย่างต่อไปนี้แสดงวิธีทําขั้นตอนนี้ให้เสร็จสมบูรณ์
// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)
สร้างกลุ่มช่องทางการแจ้งเตือน
หากต้องการจัดระเบียบลักษณะที่ปรากฏของแชแนลใน UI ของการตั้งค่าเพิ่มเติม คุณสามารถสร้างกลุ่มแชแนลได้ วิธีนี้เป็นแนวทางที่ดีเมื่อแอปของคุณรองรับบัญชีผู้ใช้หลายบัญชี เนื่องจากจะช่วยให้คุณสร้างกลุ่มช่องทางการแจ้งเตือนสำหรับแต่ละบัญชีได้ Channel Group ช่วยให้ผู้ใช้แยกแยะและควบคุมช่องการแจ้งเตือนหลายช่องที่มีชื่อเหมือนกันได้
รูปที่ 2 การตั้งค่าช่องทางการแจ้งเตือนที่มีกลุ่มสำหรับบัญชีส่วนตัวและบัญชีงาน
เช่น แอปโซเชียลเน็ตเวิร์กอาจรองรับบัญชีส่วนตัวและบัญชีงาน ในสถานการณ์นี้ บัญชีแต่ละบัญชีอาจต้องมีช่องทางการแจ้งเตือนหลายช่องทางที่มีฟังก์ชันและชื่อเหมือนกัน เช่น
บัญชีส่วนตัวที่มี 2 ช่อง
ความคิดเห็นใหม่
คำแนะนำโพสต์
บัญชีธุรกิจที่มี 2 ช่อง
ความคิดเห็นใหม่
คำแนะนำโพสต์
การจัดระเบียบช่องทางการแจ้งเตือนเป็นกลุ่มสำหรับแต่ละบัญชีช่วยให้ผู้ใช้แยกความแตกต่างระหว่างช่องทางการแจ้งเตือนได้
กลุ่มช่องทางการแจ้งเตือนแต่ละกลุ่มต้องมีรหัสที่ไม่ซ้ำกันภายในแพ็กเกจของคุณ รวมถึงชื่อที่ผู้ใช้มองเห็น ข้อมูลโค้ดต่อไปนี้แสดงวิธี สร้างกลุ่มช่องทางการแจ้งเตือน
// 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
<b>notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))</b>
หลังจากสร้างกลุ่มใหม่แล้ว คุณสามารถเรียกใช้
setGroup()
เพื่อเชื่อมโยงออบเจ็กต์ NotificationChannel ใหม่กับกลุ่มได้
เมื่อส่งช่องไปยังเครื่องมือจัดการการแจ้งเตือนแล้ว คุณจะเปลี่ยน การเชื่อมโยงระหว่างช่องการแจ้งเตือนกับกลุ่มไม่ได้