แอปสื่อที่ใช้เทมเพลต Car App Library สามารถปรับแต่งประสบการณ์การเรียกดูและการเล่นสื่อได้ พร้อมทั้งมั่นใจได้ว่าประสบการณ์การใช้งานจะได้รับการเพิ่มประสิทธิภาพสำหรับหน้าจอรถยนต์และลดสิ่งรบกวนขณะขับรถ
คู่มือนี้ถือว่าคุณมีแอปสื่อที่เล่นเสียงในโทรศัพท์อยู่แล้ว
และแอปสื่อของคุณเป็นไปตามสถาปัตยกรรมแอปสื่อของ Android ไลบรารีแอปในรถยนต์ช่วยให้คุณแทนที่ประสบการณ์การใช้งานแอปด้วยเทมเพลตแทนที่จะใช้เทมเพลตที่สร้างขึ้นโดยใช้โครงสร้างข้อมูลสร้างแอปสื่อสำหรับรถยนต์
MediaBrowser คุณยังคงต้องระบุ MediaSession
สำหรับตัวควบคุมการเล่น และ MediaBrowserService ซึ่งใช้สำหรับ
คำแนะนำและประสบการณ์การใช้งานอัจฉริยะอื่นๆ
กำหนดค่าไฟล์ Manifest ของแอป
นอกเหนือจากขั้นตอนที่อธิบายไว้ใน การใช้ไลบรารีแอป Android สำหรับรถยนต์แล้ว แอปสื่อที่ใช้เทมเพลตต้องมีคุณสมบัติต่อไปนี้
ประกาศการรองรับหมวดหมู่ในไฟล์ Manifest
แอปของคุณต้องประกาศandroidx.car.app.category.MEDIA
หมวดหมู่แอปในรถยนต์ในตัวกรอง Intent
ของ CarAppService
<application>
...
<service
...
android:name=".MyCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.MEDIA"/>
</intent-filter>
</service>
...
<application>
หากต้องการเข้าถึง MediaPlaybackTemplate แอปของคุณต้องประกาศสิทธิ์ androidx.car.app.MEDIA_TEMPLATES ในไฟล์ Manifest ด้วย
<manifest ...>
...
<uses-permission android:name="androidx.car.app.MEDIA_TEMPLATES"/>
...
</manifest>
ตั้งค่าระดับ API ขั้นต่ำของแอปในรถยนต์
แอปสื่อที่ใช้ MediaPlaybackTemplate จะรองรับเฉพาะใน CAL API 8
โปรดตรวจสอบว่าได้ตั้งค่า Car App API level ขั้นต่ำเป็น 8
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="8"/>
...
</application>
ประกาศการรองรับ Android Auto
ตรวจสอบว่าไฟล์ Manifest ของแอปมีข้อมูลต่อไปนี้
<application>
...
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
...
</application>
จากนั้นเพิ่มการประกาศเทมเพลตไปยัง automotive_app_desc.xml ใน xml
resources โดยควรมีลักษณะดังนี้
<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
<uses name="media"/>
<uses name="template"/>
</automotiveApp>
ระบุไอคอนการระบุแหล่งที่มา
อย่าลืมเพิ่มไอคอนการระบุแหล่งที่มาสำหรับแอปสื่อที่สร้างโดยใช้ Car App Library
รองรับการสั่งงานด้วยเสียง
เปิดใช้เสียงในแอปเพื่อให้ผู้ใช้ดำเนินการทั่วไปแบบแฮนด์ฟรีได้
ดูวิธีการติดตั้งใช้งานโดยละเอียดเพิ่มเติมได้ที่รองรับการสั่งงานด้วยเสียงสำหรับสื่อ
หากใช้แอปสื่อที่ใช้เทมเพลตและได้รับคำสั่งเสียง คุณ
ไม่จำเป็นต้องอัปเดต MediaBrowserService ด้วยผลการค้นหา แต่ให้พิจารณาเพิ่มการดำเนินการในเทมเพลตการเล่นสื่อเพื่ออนุญาตให้ผู้ใช้ค้นหาเนื้อหาเพิ่มเติมตามการเล่นหรือคำค้นหานั้น การรองรับคำสั่งเสียง
เป็นข้อกำหนดในการปฏิบัติตามหลักเกณฑ์ด้านคุณภาพของ VC-1
สร้างเทมเพลตการเล่น
MediaPlaybackTemplate จะแสดงข้อมูลการเล่นสื่อ
ในแอปสื่อของคลังแอปในรถยนต์ เทมเพลตนี้ช่วยให้ตั้งค่า
ส่วนหัวที่มีชื่อและการดำเนินการที่ปรับแต่งได้ ในขณะที่โฮสต์จะป้อนข้อมูลสื่อและ
ตัวควบคุมการเล่นตามสถานะของ MediaSession ของแอป
รูปที่ 1:
MediaPlaybackTemplate พร้อมการดำเนินการส่วนหัวเพื่อเปิดคิว
ที่ด้านบน
ตัวอย่างโค้ดนี้แสดงวิธีสร้างเทมเพลตการเล่นตัวอย่างที่ตั้งค่าการดำเนินการส่วนหัวซึ่งช่วยให้ผู้ใช้ไปยังหน้าจอที่มีคิวเพลงได้
val playbackTemplate = MediaPlaybackTemplate.Builder()
.setHeader(
Header.Builder()
.setStartHeaderAction(Action.BACK)
.addEndHeaderAction(
Action.Builder()
.setTitle(model.context.getString(R.string.queue_button_title))
.setIcon(
CarIcon.Builder(
IconCompat.createWithResource(
model.context,
R.drawable.gs_queue_music_vd_theme_24,
))
.build())
.setOnClickListener(showQueueScreen())
.build())
.setTitle(model.context.getString(R.string.media_playback_view_title))
.build())
.build()
เมื่อใช้ MediaPlaybackTemplate ให้ลงทะเบียนโทเค็น MediaSession โดยใช้ MediaPlaybackManager ใน CarAppService หากไม่ดำเนินการดังกล่าว ระบบจะแสดงข้อผิดพลาดเมื่อส่ง MediaPlaybackTemplate ไปยังโฮสต์
import androidx.car.app.media.MediaPlaybackManager
…
override fun onCreateSession(sessionInfo: SessionInfo): Session {
return object : Session() {
…
init {
lifecycle.addObserver(
LifecycleEventObserver { _, event ->
if (event == ON_CREATE) {
val token = ... // MediaSessionCompat.Token
(carContext.getCarService(CarContext.MEDIA_PLAYBACK_SERVICE) as MediaPlaybackManager)
.registerMediaPlaybackToken(token)
}
...
}
)
}
}
}
.registerMediaPlaybackToken จำเป็นสำหรับการแสดงข้อมูลและการควบคุมการเล่นสื่อต่อ Android Auto นอกจากนี้ยังมีความสำคัญต่อโฮสต์ในการ
สร้างการแจ้งเตือนเฉพาะสื่อด้วย
จัดระเบียบสื่อโดยใช้เทมเพลต
หากต้องการจัดระเบียบสื่อเพื่อการเรียกดู เช่น เพลงหรืออัลบั้ม เราขอแนะนำให้ใช้
SectionedItemTemplate
ซึ่งช่วยให้คุณใช้ GridSection และ
RowSection ร่วมกันเพื่อสร้างเลย์เอาต์ที่ผสมรายการรูปภาพ
และรายการข้อความ
รูปที่ 2: A
SectionedItemTemplate ที่มี RowSection
ตามด้วย GridSection
การใช้ SectionedItemTemplate ภายใน TabTemplate
วิธีที่สะดวกในการจัดหมวดหมู่สื่อภายในแอปคือการใช้
SectionedItemTemplate ภายใน
TabTemplate
val template =
SectionedItemTemplate.Builder()...build();
val tabTemplate =
TabTemplate.Builder(tabCallback)
.setTabContents(TabContents.Builder(template).build)
.setHeaderAction(Action.APP_ICON)
…
.build();
ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีออกแบบอินเทอร์เฟซผู้ใช้ของแอปสื่อโดยใช้เทมเพลตเหล่านี้ได้ที่แอปสื่อ
การไปยังตัวควบคุมการเล่น
ขณะเรียกดูสื่อ ผู้ใช้ควรจะไปยังMediaPlaybackTemplateได้อย่างรวดเร็ว
โดยไม่ถูกรบกวน หากต้องการให้เป็นไปตามข้อกำหนดด้านคุณภาพ
MFT-1 แอปของคุณต้องมีวิธีเข้าถึงMediaPlaybackTemplateจากหน้าจอการเรียกดูสื่อทั้งหมด
หากใช้ SectionedItemTemplate คุณสามารถทำได้โดยการเพิ่ม
ปุ่มการทำงานแบบลอยที่นำทางคุณไปยังหน้าจอการเล่นสื่อ สำหรับเทมเพลตอื่นๆ การดำเนินการส่วนหัวเป็นอีกวิธีหนึ่งในการดำเนินการนี้