แสดงการ์ด "กำลังเล่น"

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

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

การ์ดกำลังเล่น

หลังจากที่คุณใช้ Media Session ตั้งค่า เซสชันเป็นใช้งานอยู่ และขอโฟกัสเสียงแล้ว การ์ดกำลังเล่น จะปรากฏขึ้น

หมายเหตุ: การ์ดกำลังเล่น จะแสดงเฉพาะสำหรับ Media Session ที่ตั้งค่าแฟล็ก FLAG_HANDLES_TRANSPORT_CONTROLS แฟล็กนี้เลิกใช้งานแล้วใน API ระดับ 26 อย่างไรก็ตาม อุปกรณ์รุ่นเก่ายังอาจต้องใช้แฟล็กนี้เพื่อความเข้ากันได้แบบย้อนกลับ

ระบบจะนำการ์ดออกจากหน้าจอ Launcher เมื่อการเรียก setActive(false) ปิดใช้งาน Media Session หรือเมื่อแอปอื่นเริ่มการเล่นสื่อ หากการเล่นหยุดลงโดยสมบูรณ์และไม่มีสื่อที่ใช้งานอยู่ ให้ปิดใช้งาน Media Session ทันที หากการเล่นหยุดชั่วคราว ให้ปิดใช้งาน Media Session หลังจากผ่านไปสักระยะหนึ่ง ซึ่งโดยปกติจะอยู่ที่ 5-30 นาที

อัปเดตการ์ด

เมื่อใดก็ตามที่แอปอัปเดตสถานะการเล่นใน MediaSession การ์ด กำลังเล่น จะอัปเดตเพื่อแสดงสถานะของสื่อที่กำลังเล่น ดูวิธีดำเนินการได้ที่ อัปเดตสถานะการเล่น

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

ตอบสนองต่อการดำเนินการของผู้ใช้

เมื่อผู้ใช้เลือกการ์ดกำลังเล่น ระบบจะเปิดแอปที่เป็นเจ้าของ เซสชัน หากแอปของคุณระบุ PendingIntent เป็น setSessionActivity(), ระบบจะเปิดกิจกรรมที่คุณระบุ ดังที่แสดงในข้อมูลโค้ดต่อไปนี้ หากไม่ระบุ ระบบจะเปิด Intent ของระบบเริ่มต้น กิจกรรมที่คุณระบุต้องมีส่วนควบคุมการเล่นที่ ช่วยให้ผู้ใช้หยุดชั่วคราวหรือหยุดการเล่นได้

Kotlin

val pi: PendingIntent = Intent(context, MyActivity::class.java).let { intent ->
    PendingIntent.getActivity(
        context, 99 /*request code*/,
        intent,
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )
}
session.setSessionActivity(pi)

Java

Intent intent = new Intent(context, MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(context, 99 /*request code*/,
        intent, PendingIntent.FLAG_UPDATE_CURRENT);
session.setSessionActivity(pi);

กรณีการใช้งานที่ยอมรับ

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