หลังจากได้เรียนรู้การใช้งานและความสามารถสำคัญต่างๆของ Notification ในบทความที่ผ่านมา คราวนี้ก็ขอหยิบเรื่อง Heads-up Notification มาเล่าให้ฟังกันต่อ

บทความในซีรีย์เดียวกัน

Heads-up Notification

เป็นความสามารถของ Notification ที่ถูกเพิ่มเข้ามาใน Android 5.0 Lollipop (API 21) เพื่อทำให้การแสดง Notification เป็นที่ดึงดูดสายตาแก่ผู้ใช้มากขึ้น ซึ่งจะช่วยให้ Notification ที่มีความสำคัญมากๆถูกมองเห็นได้ง่ายขึ้น

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

การแสดงผลของ Notification ในแต่ละแบบ

Notification ที่ไม่สำคัญมากนัก

สำหรับ Notification ที่ระบบแอนดรอยด์มองว่าเป็น Notification ที่ไม่ได้สำคัญมากนัก จะทำการแสดงไอคอนของ Notification ที่ข้างบน System Bar พร้อมกับเสียง (ถ้าผู้ใช้เปิดให้มีเสียงแจ้งเตือน)

Notification ที่สำคัญมาก

สำหรับ Notification ที่ระบบแอนดรอยด์มองว่ามีความสำคัญมาก จะทำการแสดงเป็น Heads-up Notification ขึ้นมาให้ผู้ใช้เห็นอย่างชัดเจน

จะเห็นว่าการแสดงผลแบบ Heads-up Notification จะเด่นมากและบังหน้าจอข้างบนบางส่วน และแสดงนาน 6 วินาที (แต่ผู้ใช้ก็สามารถปัดเพื่อปิดได้ทันทีเช่นกัน)

จึงเป็นที่มาว่าทำไมทีมแอนดรอยด์จึงต้องกำหนดให้เฉพาะ Notification ที่มีความสำคัญมากเท่านั้นที่จะแสดงในรูปแบบนี้ เพราะผู้ใช้คงไม่แฮปปี้ซักเท่าไรถ้า Notification ทั้งหมดในเครื่องเป็นแบบนี้

เงื่อนไขในการแสดงแบบ Heads-up Notification

การแสดงแบบ Heads-up Notification จะมีเงื่อนไขที่แตกต่างกันไปตามเวอร์ชันของแอนดรอยด์ดังนี้

ตั้งแต่ Android 8.0 Oreo (API 26) ขึ้นไป

จะแสดง Heads-up Notification เฉพาะ Notification ของ Notification Channel ที่กำหนดเป็น High Importance

val channel = NotificationChannel(/* ID */, /* Name */, NotificationManager.IMPORTANCE_HIGH)

ส่วน Notification Channel ที่กำหนด Importance ไว้ต่ำกว่านั้น ก็จะถือว่าไม่สำคัญมากนักและจะแสดงผลแบบปกติ

เวอร์ชันที่ต่ำกว่า Android 8.0 Oreo (API 26)

Notification ที่กำหนด Priority เป็น High Priority และกำหนดให้มีเสียงหรือสั่น จะแสดงเป็นแบบ Heads-up Notification

val notification = NotificationCompat.Builder(/* ... */).apply {
    /* ... */
    priority = NotificationCompat.PRIORITY_HIGH
    setVibrate(longArrayOf(0))
}.build()

ถึงแม้ว่า Notification กำหนดเป็น High Priority แต่ถ้าไม่มีเสียงหรือสั่น ก็จะแสดงผลแบบปกติ จึงเป็นที่มาว่าทำไมจึงต้องใช้คำสั่ง setVibrate(...) เพื่อช่วยทำให้ Notification แสดงเป็น Heads-up Notification

Notification บางตัวก็ไม่จำเป็นต้องใช้ Heads-up Notification

เพราะ Heads-up Notification เป็นการแสดงผลที่รบกวนผู้ใช้สูงมาก ดังนั้นจึงควรแบ่งลำดับความสำคัญของ Notification ให้เหมาะสม อันไหนที่สำคัญจริงๆและเร่งด่วนมากๆก็ทำให้เป็น Heads-up Notification ส่วนอันไหนที่ไม่ได้สำคัญมากก็ให้แสดงแบบปกติ

อย่าให้ทุกอันแสดงเป็น Heads-up Notification จนผู้ใช้รำคาญและปิดการแสดง Notification ของแอปไปตลอดกาล