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

เริ่มตั้งแต่ Android 8.0 (API ระดับ 26) เป็นต้นไป การแจ้งเตือนทั้งหมดต้องได้รับการกำหนดให้กับ สำหรับแต่ละช่อง คุณสามารถตั้งค่าลักษณะภาพและเสียง นำไปใช้กับการแจ้งเตือนทั้งหมดในช่องนั้น ผู้ใช้เปลี่ยนการตั้งค่าเหล่านี้ได้ และเลือกช่องทางการแจ้งเตือนจากแอปของคุณ ที่อาจเป็นการรบกวนหรือ มองเห็นได้

รับชมภาพรวมของช่องและการแจ้งเตือนอื่นๆ ได้ในวิดีโอต่อไปนี้ ใน Android 8.0

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

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

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

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

เมื่อกำหนดเป้าหมายเป็น Android 8.0 (API ระดับ 26) ขึ้นไป คุณต้องใช้อย่างใดอย่างหนึ่งหรือ ช่องทางการแจ้งเตือนอื่นๆ หากตั้งค่า targetSdkVersion เป็น 25 หรือต่ำกว่า เมื่อแอปใช้ Android 8.0 (API ระดับ 26) ขึ้นไป ก็จะทำงานเหมือนเดิม เช่นในอุปกรณ์ที่ใช้ Android 7.1 (API ระดับ 25) หรือต่ำกว่า

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

หากต้องการสร้างช่องทางการแจ้งเตือน ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้าง ออบเจ็กต์ NotificationChannel รายการ ที่มีรหัสช่องที่ไม่ซ้ำกัน ชื่อที่ผู้ใช้มองเห็น และระดับความสำคัญ

  2. (ไม่บังคับ) ระบุคำอธิบายที่ผู้ใช้เห็นในการตั้งค่าระบบ กับ setDescription()

  3. ลงทะเบียนช่องทางการแจ้งเตือนโดยส่งไปยัง 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 โดยใช้หนึ่งใน ระดับความสำคัญ 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 คุณ ไม่สามารถเปลี่ยนระดับความสำคัญ แต่ผู้ใช้สามารถเปลี่ยน ค่ากำหนดสำหรับช่องแอปของคุณได้ตลอดเวลา

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

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

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

  1. รับออบเจ็กต์ NotificationChannel โดยการเรียกใช้ getNotificationChannel() หรือ getNotificationChannels()

  2. ค้นหาการตั้งค่าแชแนลที่เจาะจง เช่น 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 การตั้งค่า คุณจะสร้าง Channel Group ได้ นี่คือวิธีที่ดีหากแอปของคุณรองรับ บัญชีผู้ใช้หลายบัญชี เช่น โปรไฟล์งาน เพราะจะให้คุณสร้าง กลุ่มแชแนลการแจ้งเตือนสำหรับแต่ละบัญชี วิธีนี้จะทำให้ผู้ใช้ทราบว่า และควบคุมช่องทางการแจ้งเตือนหลายช่องทางที่มีชื่อเหมือนกัน

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

ตัวอย่างเช่น แอปโซเชียลเน็ตเวิร์กอาจมีการสนับสนุนทั้งในเรื่องส่วนตัวและเรื่องงาน บัญชี ในสถานการณ์นี้ แต่ละบัญชีอาจต้องการการแจ้งเตือนหลายรายการ แชแนลที่มีฟังก์ชันและชื่อเหมือนกันดังตัวอย่างต่อไปนี้

  • บัญชีส่วนตัวที่มีช่อง 2 ช่อง ได้แก่

    • ความคิดเห็นใหม่

    • โพสต์แนะนำ

  • บัญชีธุรกิจที่มี 2 ช่อง ได้แก่

    • ความคิดเห็นใหม่

    • โพสต์แนะนำ

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

กลุ่มช่องทางการแจ้งเตือนแต่ละกลุ่มต้องมีรหัส ซึ่งต้องไม่ซ้ำกันภายใน รวมถึงชื่อที่ผู้ใช้มองเห็น ข้อมูลโค้ดต่อไปนี้จะสาธิตวิธี เพื่อสร้าง Channel Group การแจ้งเตือน

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 ใหม่กับกลุ่ม

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