برنامههای رسانهای که از الگوهای کتابخانه برنامه خودرو استفاده میکنند، میتوانند تجربه مرور و پخش رسانه خود را سفارشی کنند و در عین حال اطمینان حاصل کنند که این تجربه برای صفحهنمایش خودرو بهینه شده است و حواسپرتی را در حین رانندگی به حداقل میرساند.
این راهنما فرض میکند که شما قبلاً یک برنامه رسانه دارید که صدا را روی تلفن پخش میکند و برنامه رسانه شما با معماری برنامه رسانه Android مطابقت دارد. کتابخانه برنامه خودرو به شما این امکان را میدهد که تجربه درونبرنامهای را با الگوهایی جایگزین کنید، بهجای الگوهایی که با استفاده از برنامههای رسانهای ساخت خودروها، ساختار داده MediaBrowser
ساخته شدهاند. هنوز باید یک MediaSession
برای کنترلهای بازپخش و یک MediaBrowserService
ارائه کنید که برای توصیهها و سایر تجربیات هوشمند استفاده میشود.
مانیفست برنامه خود را پیکربندی کنید
علاوه بر مراحل توضیح داده شده در استفاده از کتابخانه برنامه Android for Cars ، موارد زیر برای برنامه های رسانه قالب مورد نیاز است:
پشتیبانی از دسته را در مانیفست خود اعلام کنید
برنامه شما باید دسته برنامه ماشین androidx.car.app.category.MEDIA
را در فیلتر هدف 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 ...>
...
<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 را اعلام کنید
مطمئن شوید موارد زیر در مانیفست برنامه شما گنجانده شده است:
<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
اطلاعات پخش رسانه را در برنامه رسانه کتابخانه Car App شما نمایش می دهد. این الگو اجازه میدهد تا یک سرصفحه با عنوان و اقدامات قابل تنظیم تنظیم کنید، در حالی که اطلاعات رسانه و کنترلهای پخش توسط میزبان بر اساس وضعیت 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: یک 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
استفاده میکنید، میتوانید با افزودن یک دکمه عمل شناور که شما را به صفحه پخش رسانه هدایت میکند، به این هدف برسید. برای سایر قالبها، اکشن هدر راه دیگری برای دستیابی به این هدف است.