פיתוח אפליקציית מדיה לפי תבנית

אפליקציות מדיה לפי תבנית נמצאות בגרסת בטא
בשלב הזה, כל אחד יכול לפרסם בחנות Play אפליקציות מדיה לפי תבנית לגרסאות לקהל יעד מצומצם ולבדיקות פנימיות. אפשרות לפרסם במסלולי הפצה פתוחים ובמסלולי הפצה בסביבת הייצור תתאפשר במועד מאוחר יותר.

אפליקציות מדיה שמשתמשות בתבניות של ספריית האפליקציות לרכב יכולות להתאים אישית את חוויית הגלישה וההפעלה של המדיה, תוך שמירה על אופטימיזציה של החוויה למסכי הרכב וצמצום ההסחות הדעת בזמן הנהיגה.

במדריך הזה נניח שכבר יש לכם אפליקציית מדיה שמפעילה אודיו בטלפון, ושאפליקציית המדיה עומדת בדרישות של ארכיטקטורת אפליקציות המדיה של Android. ספריית האפליקציות לרכב מאפשרת לכם להחליף את חוויית השימוש באפליקציה בתבניות במקום בתבניות שנוצרו באמצעות מבנה הנתונים MediaBrowser של יצירת אפליקציות מדיה לרכב. עדיין צריך לספק MediaSession לרכיבי ה-UI להפעלת סרטונים ו-MediaBrowserService, שמשמש להמלצות ולחוויות חכמות אחרות.

הגדרת המניפסט של האפליקציה

בנוסף לשלבים המתוארים בקטע שימוש בספריית האפליקציות של Android למכוניות, יש צורך לבצע את הפעולות הבאות באפליקציות מדיה שמבוססות על תבניות:

הצהרת תמיכה בקטגוריות במניפסט

האפליקציה צריכה להצהיר על 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 ...>
  ...
  <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>

לאחר מכן מוסיפים את ההצהרה template ל-automotive_app_desc.xml במשאבי ה-XML. הוא אמור להיראות כך:

<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
 <uses name="media"/>
 <uses name="template"/>
</automotiveApp>

לספק סמל שיוך

חשוב להוסיף סמל שיוך לאפליקציות מדיה שנוצרו באמצעות ספריית האפליקציות של Android למכוניות.

תמיכה בפעולות קוליות

מפעילים את התכונה 'הפעלה קולית' באפליקציה כדי לאפשר למשתמשים לבצע פעולות נפוצות ללא שימוש בידיים. הוראות מפורטות יותר להטמעה זמינות במאמר תמיכה בפעולות קוליות למדיה. אם אתם משתמשים באפליקציית מדיה עם תבנית, כשאתם מקבלים פקודה קולית, אתם לא צריכים לעדכן את MediaBrowserService בתוצאות החיפוש. במקום זאת, מומלץ להוסיף פעולה בתבנית ההפעלה של המדיה כדי לאפשר למשתמש למצוא תוכן נוסף על סמך ההפעלה או שאילתת החיפוש הזו. התמיכה בפקודות קוליות צריכה לעמוד בהנחיית האיכות VC-1.

יצירת תבנית ההפעלה

ה-MediaPlaybackTemplate מציג מידע על הפעלת המדיה באפליקציית המדיה בספריית האפליקציות לרכב. התבנית הזו מאפשרת להגדיר כותרת עם פעולות שניתן להתאים אישית, בעוד שהמארח מאכלס את פרטי המדיה ואת אמצעי הבקרה על ההפעלה על סמך המצב של MediaSession באפליקציה.

נגן מוזיקה שבו מוצגת המוזיקה &#39;צלילי האביב&#39; של 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, תוכלו לעשות זאת על ידי הוספת לחצן פעולה צף שמפנה אתכם למסך ההפעלה של המדיה. בתבניות אחרות, פעולת כותרת היא דרך נוספת לעשות זאת.