แอปสื่อที่ใช้เทมเพลตคลังแอปในรถสามารถปรับแต่งประสบการณ์การเรียกดูและการเล่นสื่อไปพร้อมกับการรับรองว่าประสบการณ์การใช้งานได้รับการเพิ่มประสิทธิภาพสำหรับหน้าจอรถยนต์และลดสิ่งรบกวนขณะขับรถ
คู่มือนี้จะถือว่าคุณมีแอปสื่อที่เล่นเสียงในโทรศัพท์อยู่แล้วและแอปสื่อของคุณเป็นไปตามสถาปัตยกรรมแอปสื่อ 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 ซึ่งควรมีลักษณะดังนี้
<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android"> <uses name="media"/> <uses name="template"/> </automotiveApp>
ระบุไอคอนการระบุแหล่งที่มา
อย่าลืมเพิ่มไอคอนการระบุแหล่งที่มาสําหรับแอปสื่อที่สร้างโดยใช้ไลบรารีแอปรถยนต์
รองรับการสั่งงานด้วยเสียง
เปิดใช้เสียงในแอปเพื่อให้ผู้ใช้ดำเนินการทั่วไปได้แบบแฮนด์ฟรี ดูวิธีการติดตั้งใช้งานโดยละเอียดได้ที่รองรับการสั่งงานด้วยเสียงสำหรับสื่อ เมื่อใช้แอปสื่อที่มีเทมเพลต หากได้รับคําสั่งเสียง คุณไม่จําเป็นต้องอัปเดต 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
followed by a 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
ได้อย่างรวดเร็วโดยไม่มีการรบกวน แอปของคุณต้องมีวิธีเข้าถึง MediaPlaybackTemplate
จากหน้าจอการเรียกดูสื่อทั้งหมดเพื่อให้เป็นไปตามข้อกำหนดด้านคุณภาพของ MFT-1
หากใช้ SectionedItemTemplate
คุณจะทำสิ่งต่อไปนี้ได้โดยเพิ่มปุ่มการดำเนินการแบบลอยตัวที่นำทางคุณไปยังหน้าจอการเล่นสื่อ สําหรับเทมเพลตอื่นๆ การดำเนินการส่วนหัวเป็นอีกวิธีหนึ่งในการดําเนินการนี้