یک برنامه رسانه ای قالبی بسازید

برنامه‌های رسانه قالب‌بندی شده در نسخه بتا هستند
در این زمان، هر کسی می‌تواند برنامه‌های رسانه‌ای قالب‌بندی‌شده را برای آزمایش داخلی و آهنگ‌های آزمایش بسته در فروشگاه Play منتشر کند. انتشار برای باز کردن آهنگ ها و آهنگ های تولید در تاریخ بعدی مجاز خواهد بود.

برنامه‌های رسانه‌ای که از الگوهای کتابخانه برنامه خودرو استفاده می‌کنند، می‌توانند تجربه مرور و پخش رسانه خود را سفارشی کنند و در عین حال اطمینان حاصل کنند که این تجربه برای صفحه‌نمایش خودرو بهینه شده است و حواس‌پرتی را در حین رانندگی به حداقل می‌رساند.

این راهنما فرض می‌کند که شما قبلاً یک برنامه رسانه دارید که صدا را روی تلفن پخش می‌کند و برنامه رسانه شما با معماری برنامه رسانه 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 برنامه شما پر می‌شوند.

پخش کننده موسیقی Sounds of Spring توسط Summer Fielding را با یک نشان می دهد      پرتره مربعی زن در حال نواختن گیتار.

شکل 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 استفاده می‌کنید، می‌توانید با افزودن یک دکمه عمل شناور که شما را به صفحه پخش رسانه هدایت می‌کند، به این هدف برسید. برای سایر قالب‌ها، اکشن هدر راه دیگری برای دستیابی به این هدف است.