หากต้องการเปิดใช้การเล่นสื่อใน Android Auto และ Android Automotive OS (AAOS) ให้ ใช้ตัวควบคุมการเล่นโดยการลงทะเบียนเซสชันสื่อและจัดการ เมธอดการเรียกกลับ หน้านี้จะอธิบายวิธีทำสิ่งต่อไปนี้
ลงทะเบียนออบเจ็กต์
MediaSessionCompat
ในบริการเบราว์เซอร์สื่อใช้เมธอด
MediaSessionCompat.Callback
เพื่อตอบสนองต่อคำขอการเล่นของผู้ใช้กำหนดค่าการดำเนินการเล่นมาตรฐานและการดำเนินการเล่นที่กำหนดเอง
ตั้งค่าสถานะการเล่นเริ่มต้นสำหรับเซสชันสื่อ
เพิ่มไอคอนเพื่อระบุรูปแบบเสียง
สร้างลิงก์จากรายการสื่อที่กำลังเล่นอยู่
Android Auto และ AAOS จะส่งคำสั่งควบคุมการเล่นผ่าน
MediaSessionCompat
สำหรับบริการของคุณ คุณต้องลงทะเบียนเซสชันและ
ใช้วิธีการเรียกกลับที่เกี่ยวข้อง
ลงทะเบียนเซสชันสื่อ
ในเมธอด onCreate
ของบริการเบราว์เซอร์สื่อ ให้สร้างอินสแตนซ์ของ
MediaSessionCompat
จากนั้นเรียกใช้ setSessionToken
เพื่อลงทะเบียน
เซสชันสื่อ ข้อมูลโค้ดนี้แสดงวิธีสร้างและลงทะเบียน Media
Session
Kotlin
override fun onCreate() {
super.onCreate()
...
// Start a new MediaSession.
val session = MediaSessionCompat(this, "session tag").apply {
// Set a callback object that implements MediaSession.Callback
// to handle play control requests.
setCallback(MyMediaSessionCallback())
}
sessionToken = session.sessionToken
...
}
Java
public void onCreate() {
super.onCreate();
...
// Start a new MediaSession.
MediaSessionCompat session = new MediaSessionCompat(this, "session tag");
setSessionToken(session.getSessionToken());
// Set a callback object that implements MediaSession.Callback
// to handle play control requests.
session.setCallback(new MyMediaSessionCallback());
...
}
เมื่อสร้างออบเจ็กต์เซสชันสื่อ คุณจะตั้งค่าออบเจ็กต์การเรียกกลับที่จะใช้
เพื่อจัดการคำขอควบคุมการเล่น คุณสร้างออบเจ็กต์การเรียกกลับนี้ได้โดย
ระบุการใช้งานของคลาส MediaSessionCompat.Callback
สำหรับแอปของคุณ ส่วนถัดไปจะอธิบายวิธีใช้ออบเจ็กต์นี้
ใช้คำสั่งเล่น
เมื่อผู้ใช้ขอเล่นรายการสื่อจากแอปของคุณ Android Automotive
OS และ Android Auto จะใช้คลาส MediaSessionCompat.Callback
จากออบเจ็กต์ MediaSessionCompat
ของแอปที่ได้จาก
บริการเบราว์เซอร์สื่อของแอป เมื่อผู้ใช้ต้องการควบคุมการเล่นเนื้อหา
เช่น หยุดเล่นชั่วคราวหรือข้ามไปยังแทร็กถัดไป Android Auto และ Android
Automotive OS จะเรียกใช้เมธอดใดเมธอดหนึ่งของออบเจ็กต์การเรียกกลับ
หากต้องการจัดการการเล่นเนื้อหา แอปของคุณต้องขยายคลาส Abstract
MediaSessionCompat.Callback
และใช้เมธอดที่แอปของคุณรองรับ
ใช้เมธอดเรียกกลับแต่ละรายการต่อไปนี้ที่เหมาะกับประเภทเนื้อหาที่แอปของคุณนำเสนอ
onPrepare
- AAOS จะเรียกใช้วิธีนี้เมื่อแหล่งที่มาของสื่อมีการเปลี่ยนแปลง
onPlay
เรียกใช้เมื่อผู้ใช้เลือกเล่นโดยไม่ได้เลือกรายการใดรายการหนึ่ง แอปของคุณต้องเล่นเนื้อหาเริ่มต้นหรือหากหยุดการเล่นชั่วคราวด้วย
onPause
แอปจะเล่นต่อonPlayFromMediaId
เรียกใช้เมื่อผู้ใช้เลือกเล่นรายการที่เฉพาะเจาะจง เมธอดจะรับรหัสที่บริการเบราว์เซอร์สื่อกำหนดให้กับรายการสื่อใน ลำดับชั้นของเนื้อหา
onPlayFromSearch
เรียกใช้เมื่อผู้ใช้เลือกเล่นจากคำค้นหา แอปต้องเลือกตัวเลือกที่เหมาะสมตามสตริงการค้นหาที่ส่งเข้ามา
onPause
เรียกใช้เมื่อผู้ใช้เลือกหยุดเล่น
onSkipToNext
เรียกใช้เมื่อผู้ใช้เลือกข้ามไปยังรายการถัดไป
onSkipToPrevious
เรียกใช้เมื่อผู้ใช้เลือกข้ามไปยังรายการก่อนหน้า
onStop
เรียกใช้เมื่อผู้ใช้เลือกหยุดเล่น ลบล้างวิธีการเหล่านี้ในแอปเพื่อแสดงผลลัพธ์ที่เลือก คุณไม่จำเป็นต้องใช้วิธีการหากแอปไม่รองรับวัตถุประสงค์ของวิธีการนั้นๆ เช่น หากแอปของคุณเล่นไลฟ์สด เช่น การถ่ายทอดสดกีฬา คุณไม่จำเป็นต้องใช้
onSkipToNext
แต่ให้ใช้การติดตั้งใช้งานเริ่มต้นของonSkipToNext
แทน
แอปของคุณไม่จำเป็นต้องมีตรรกะพิเศษใดๆ ในการเล่นเนื้อหาผ่านลำโพงของรถยนต์ เมื่อแอปได้รับคำขอให้เล่นเนื้อหา แอปจะเล่นเสียง ในลักษณะเดียวกับที่เล่นเนื้อหาผ่านลำโพงโทรศัพท์หรือ หูฟังของผู้ใช้ Android Auto และ AAOS จะส่งเนื้อหาเสียงไปยังระบบของรถยนต์โดยอัตโนมัติเพื่อเล่นผ่านลำโพงของรถยนต์
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเล่นเนื้อหาเสียงได้ที่ภาพรวมของโปรแกรมเล่นสื่อ ภาพรวมของแอปเสียง และภาพรวมของ ExoPlayer
ตั้งค่าการดำเนินการเล่นมาตรฐาน
Android Auto และ AAOS จะแสดงตัวควบคุมการเล่นตาม
การดำเนินการที่เปิดใช้ในออบเจ็กต์ PlaybackStateCompat
โดยค่าเริ่มต้น แอปของคุณต้องรองรับการดำเนินการต่อไปนี้
นอกจากนี้ แอปยังรองรับการดำเนินการต่อไปนี้ได้หากเกี่ยวข้องกับเนื้อหาของแอป
นอกจากนี้ คุณยังเลือกสร้างคิวการเล่นเพื่อแสดงต่อผู้ใช้ได้ด้วย
โดยเรียกใช้เมธอด setQueue
และ setQueueTitle
เปิดใช้การดำเนินการ ACTION_SKIP_TO_QUEUE_ITEM
และกำหนดการเรียกกลับ onSkipToQueueItem
นอกจากนี้ ยังเพิ่มการรองรับไอคอนกำลังเล่น ซึ่งเป็นตัวบ่งชี้ว่ากำลังเล่นอะไรอยู่
โดยเรียกใช้เมธอด setActiveQueueItemId
และส่งรหัสของรายการที่เล่นในคิว คุณต้องอัปเดต
setActiveQueueItemId
ทุกครั้งที่มีการเปลี่ยนแปลงคิว
Android Auto และ AAOS จะแสดงปุ่มสำหรับแต่ละการดำเนินการที่เปิดใช้ รวมถึง
คิวการเล่น เมื่อผู้ใช้คลิกปุ่มเหล่านี้ ระบบจะเรียกใช้แฮนเดิลการเรียกกลับที่เกี่ยวข้องจาก MediaSessionCompat.Callback
จองพื้นที่ที่ไม่ได้ใช้
Android Auto และ AAOS จะสำรองพื้นที่ใน UI สำหรับการดำเนินการ ACTION_SKIP_TO_PREVIOUS
และ ACTION_SKIP_TO_NEXT
หากแอปไม่รองรับฟังก์ชันใดฟังก์ชันหนึ่งเหล่านี้ Android Auto และ AAOS จะใช้พื้นที่ดังกล่าวเพื่อแสดงการดำเนินการที่กำหนดเองที่คุณสร้างขึ้น
หากไม่ต้องการใส่การดำเนินการที่กำหนดเองในพื้นที่เหล่านั้น คุณสามารถจองพื้นที่ดังกล่าวเพื่อให้ Android Auto และ AAOS เว้นพื้นที่ว่างไว้เมื่อใดก็ตามที่แอปไม่รองรับฟังก์ชันที่เกี่ยวข้อง
โดยให้เรียกใช้เมธอด setExtras
พร้อมกับแพ็กเกจข้อมูลเพิ่มเติมที่มีค่าคงที่ซึ่งสอดคล้องกับฟังก์ชันที่สงวนไว้
SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT
สอดคล้องกับ ACTION_SKIP_TO_NEXT
และ
SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV
สอดคล้องกับ ACTION_SKIP_TO_PREVIOUS
ใช้ค่าคงที่เหล่านี้เป็นคีย์ใน
Bundle และใช้บูลีน true
เป็นค่า
ตั้งค่า PlaybackState เริ่มต้น
เมื่อ Android Auto และ AAOS สื่อสารกับบริการเบราว์เซอร์สื่อ
เซสชันสื่อจะสื่อสารสถานะการเล่นเนื้อหาโดยใช้ PlaybackStateCompat
แอปของคุณไม่ควรเริ่มเล่นเพลงโดยอัตโนมัติเมื่อ AAOS หรือ Android Auto เชื่อมต่อกับบริการเบราว์เซอร์สื่อ แต่ให้ใช้ Android Auto และ AAOS เพื่อเล่นต่อหรือเริ่มเล่นโดยอิงตามสถานะของรถยนต์หรือการดำเนินการของผู้ใช้แทน
โดยให้ตั้งค่า PlaybackStateCompat
เริ่มต้นของเซสชันสื่อเป็น STATE_STOPPED
, STATE_PAUSED
,
STATE_NONE
หรือ STATE_ERROR
เซสชันสื่อภายใน Android Auto และ AAOS จะมีระยะเวลาเท่ากับ
ระยะเวลาการขับรถเท่านั้น ดังนั้นผู้ใช้จึงเริ่มและหยุดเซสชันเหล่านี้บ่อยครั้ง หากต้องการ
ส่งเสริมประสบการณ์การใช้งานที่ราบรื่นระหว่างไดรฟ์ ให้ติดตามสถานะเซสชันก่อนหน้าของผู้ใช้
เพื่อให้เมื่อแอปสื่อได้รับคำขอเล่นต่อ ผู้ใช้
จะสามารถเล่นต่อจากจุดที่หยุดไว้ได้โดยอัตโนมัติ เช่น รายการสื่อที่เล่นล่าสุด PlaybackStateCompat
และคิว
เพิ่มการดำเนินการเล่นที่กำหนดเอง
คุณสามารถเพิ่มการดำเนินการเล่นที่กำหนดเองเพื่อแสดงการดำเนินการเพิ่มเติมที่แอปสื่อรองรับได้
หากมีพื้นที่เพียงพอ (และคุณไม่ได้จองไว้) Android จะ
เพิ่มการดำเนินการที่กำหนดเองลงในตัวควบคุมการขนส่ง มิฉะนั้น การดำเนินการที่กำหนดเองจะปรากฏในเมนูรายการเพิ่มเติม Android จะแสดงการดำเนินการที่กำหนดเองตามลำดับที่คุณเพิ่มลงใน PlaybackStateCompat
ใช้การกระทำที่กำหนดเองเพื่อให้ลักษณะการทำงานแตกต่างจากการกระทำมาตรฐาน อย่าใช้เพื่อแทนที่หรือทำซ้ำการกระทำมาตรฐาน
หากต้องการเพิ่มการดำเนินการที่กำหนดเอง ให้ใช้วิธี addCustomAction
ในคลาส PlaybackStateCompat.Builder
ข้อมูลโค้ดนี้แสดงวิธีเพิ่ม
การดำเนินการที่กำหนดเองลงใน "เริ่มสถานีวิทยุ"
Kotlin
val customActionExtras = Bundle()
customActionExtras.putInt(
androidx.media3.session.MediaConstants.EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT,
androidx.media3.session.CommandButton.ICON_RADIO)
stateBuilder.addCustomAction(
PlaybackStateCompat.CustomAction.Builder(
CUSTOM_ACTION_START_RADIO_FROM_MEDIA,
resources.getString(R.string.start_radio_from_media),
startRadioFromMediaIcon // or R.drawable.media3_icon_radio
).run {
setExtras(customActionExtras)
build()
}
)
Java
Bundle customActionExtras = new Bundle();
customActionExtras.putInt(
androidx.media3.session.MediaConstants.EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT,
androidx.media3.session.CommandButton.ICON_RADIO);
stateBuilder.addCustomAction(
new PlaybackStateCompat.CustomAction.Builder(
CUSTOM_ACTION_START_RADIO_FROM_MEDIA,
resources.getString(R.string.start_radio_from_media),
startRadioFromMediaIcon) // or R.drawable.media3_icon_radio
.setExtras(customActionExtras)
.build());
ดูตัวอย่างวิธีการนี้แบบละเอียดเพิ่มเติมได้ที่เมธอด setCustomAction
ในแอปตัวอย่าง Universal Android Music Player บน GitHub หลังจากสร้างการดำเนินการที่กำหนดเองแล้ว เซสชันสื่อจะตอบสนองต่อการดำเนินการได้โดยการลบล้างเมธอด onCustomAction
ข้อมูลโค้ดนี้แสดงวิธีที่แอปของคุณอาจตอบสนองต่อการดำเนินการ "เริ่มสถานีวิทยุ"
Kotlin
override fun onCustomAction(action: String, extras: Bundle?) {
when(action) {
CUSTOM_ACTION_START_RADIO_FROM_MEDIA -> {
...
}
}
}
Java
@Override
public void onCustomAction(@NonNull String action, Bundle extras) {
if (CUSTOM_ACTION_START_RADIO_FROM_MEDIA.equals(action)) {
...
}
}
ดูข้อมูลเพิ่มเติมได้ที่เมธอด onCustomAction
ในแอปตัวอย่าง Universal Android
Music Player บน GitHub
สร้างไอคอนสำหรับการดำเนินการที่กำหนดเอง
การดำเนินการที่กำหนดเองแต่ละรายการที่คุณสร้างต้องมีไอคอน
หากคำอธิบายของไอคอนนั้นตรงกับค่าคงที่ CommandButton.ICON_
อย่างใดอย่างหนึ่ง ให้ตั้งค่าจำนวนเต็มสำหรับคีย์ EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT
ของส่วน
extras ของการดำเนินการที่กำหนดเอง ในระบบที่รองรับ การดำเนินการนี้จะลบล้างทรัพยากรไอคอนที่ส่งไปยัง
CustomAction.Builder
ซึ่งจะช่วยให้คอมโพเนนต์ของระบบแสดงผลการดำเนินการและ
การดำเนินการเล่นอื่นๆ ได้อย่างสอดคล้องกัน
นอกจากนี้ คุณต้องระบุทรัพยากรไอคอนด้วย แอปในรถยนต์สามารถทำงานได้ในหน้าจอที่มีขนาดและความหนาแน่นแตกต่างกันมากมาย ดังนั้นไอคอนที่คุณระบุต้องเป็นVector Drawable ใช้ Vector Drawable เพื่อปรับขนาดชิ้นงานโดยไม่สูญเสียรายละเอียด Vector Drawable สามารถจัดแนวขอบและมุมตามขอบเขตพิกเซลที่มีความละเอียดน้อย
หากการดำเนินการที่กำหนดเองเป็นแบบมีสถานะ (หากสลับการตั้งค่าการเล่นเปิดหรือปิด) ให้ระบุไอคอนที่แตกต่างกันสำหรับสถานะต่างๆ เพื่อช่วยให้ผู้ใช้เห็นการเปลี่ยนแปลงเมื่อ เลือกการดำเนินการ
ระบุรูปแบบไอคอนอื่นสำหรับดำเนินการที่ปิดใช้
เมื่อการกระทำที่กำหนดเองไม่พร้อมใช้งานในบริบทปัจจุบัน ให้สลับไอคอนการกระทำที่กำหนดเอง กับไอคอนอื่นที่แสดงว่าการกระทำถูกปิดใช้

ระบุรูปแบบเสียง
หากต้องการระบุว่าสื่อที่เล่นใช้รูปแบบเสียงพิเศษ
คุณสามารถระบุไอคอนที่จะแสดงในรถยนต์ที่รองรับฟีเจอร์นี้ได้ คุณตั้งค่า KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI
และ
KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI
ในแพ็กเกจเนื้อหาพิเศษของ
รายการสื่อที่กำลังเล่น (ส่งไปยัง MediaSession.setMetadata
) ได้
ตั้งค่าทั้ง 2 รายการเพื่อให้รองรับเลย์เอาต์ที่แตกต่างกัน
นอกจากนี้ คุณยังตั้งค่า KEY_IMMERSIVE_AUDIO
extra
เพื่อแจ้งให้ OEM รถยนต์ทราบว่านี่คือเสียงสมจริง และควรระมัดระวังเป็นอย่างยิ่ง
เมื่อตัดสินใจว่าจะใช้เอฟเฟกต์เสียงที่อาจรบกวน
เนื้อหาแบบสมจริงหรือไม่
เพิ่มลิงก์จากรายการที่กำลังเล่น
คุณสามารถกำหนดค่ารายการสื่อที่กำลังเล่นเพื่อให้คำบรรยายแทนเสียง คำอธิบาย หรือทั้ง 2 อย่างเป็นลิงก์ไปยังรายการสื่ออื่นๆ ซึ่งจะช่วยให้ผู้ใช้ไปยังรายการที่เกี่ยวข้องได้อย่างรวดเร็ว เช่น อาจไปยังเพลงอื่นๆ ของศิลปินคนเดียวกันหรือ ไปยังตอนอื่นๆ ของพอดแคสต์ หากรถยนต์รองรับฟีเจอร์นี้ ผู้ใช้ จะแตะลิงก์เพื่อเรียกดูเนื้อหานั้นได้
หากต้องการเพิ่มลิงก์ ให้กำหนดค่าข้อมูลเมตา KEY_SUBTITLE_LINK_MEDIA_ID
(เพื่อลิงก์จากคำบรรยาย) หรือ KEY_DESCRIPTION_LINK_MEDIA_ID
(เพื่อลิงก์จากคำอธิบาย) ดูรายละเอียดได้ที่เอกสารอ้างอิงสำหรับฟิลด์ข้อมูลเมตาเหล่านั้น