Tworzenie aplikacji multimedialnej na podstawie szablonu

Aplikacje multimedialne na podstawie szablonu są w wersji beta
Obecnie każdy może publikować aplikacje multimedialne oparte na szablonach na ścieżkach testów wewnętrznych i testów zamkniętych w Sklepie Google Play. Publikowanie na ścieżkach otwartych i produkcyjnych będzie dozwolone w późniejszym terminie.

Aplikacje multimedialne korzystające z szablonów biblioteki aplikacji do samochodu mogą dostosowywać sposób przeglądania i odtwarzania multimediów, zapewniając jednocześnie optymalizację pod kątem ekranów samochodowych i minimalizując rozpraszanie uwagi podczas jazdy.

W tym przewodniku zakładamy, że masz już aplikację do multimediów, która odtwarza dźwięk na telefonie, i że jest ona zgodna z architekturą aplikacji multimedialnych na Androida. Biblioteka aplikacji do samochodu umożliwia zastąpienie interfejsu w aplikacji szablonami zamiast tych, które zostały utworzone za pomocą struktury danych Tworzenie aplikacji multimedialnych do samochodów MediaBrowser. Nadal musisz podać MediaSession dla elementów sterujących odtwarzaniem i MediaBrowserService, który jest używany do rekomendacji i innych inteligentnych funkcji.

Konfigurowanie pliku manifestu aplikacji

Oprócz czynności opisanych w artykule Korzystanie z biblioteki aplikacji Android do samochodu aplikacje do multimediów oparte na szablonach muszą spełniać te wymagania:

Deklarowanie obsługi kategorii w pliku manifestu

Aplikacja musi zadeklarować androidx.car.app.category.MEDIA kategorię aplikacji samochodowej w filtrze intencji w pliku 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>

Aby uzyskać dostęp do MediaPlaybackTemplate, aplikacja musi też zadeklarować uprawnienie androidx.car.app.MEDIA_TEMPLATES w pliku manifestu:

<manifest ...>
  ...
  <uses-permission android:name="androidx.car.app.MEDIA_TEMPLATES"/>
  ...
</manifest>

Ustawianie minimalnego poziomu interfejsu API aplikacji samochodowej

Aplikacje multimedialne korzystające z MediaPlaybackTemplate są obsługiwane tylko w przypadku interfejsu CAL API 8. Upewnij się, że minimalna wartość Car App API level to 8.

<application ...>
  ...
  <meta-data
    android:name="androidx.car.app.minCarApiLevel"
    android:value="8"/>
  ...
</application>

Deklarowanie obsługi Androida Auto

Upewnij się, że w pliku manifestu aplikacji znajdują się te elementy:

<application>
  ...
  <meta-data android:name="com.google.android.gms.car.application"
      android:resource="@xml/automotive_app_desc"/>
  ...
</application>

Następnie dodaj deklarację szablonu do automotive_app_desc.xml w plikach xml zasobów. Powinien on wyglądać tak:

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

Dodaj ikonę atrybucji

Pamiętaj, aby dodać ikonę atrybucji w przypadku aplikacji multimedialnych utworzonych przy użyciu biblioteki Car App Library.

Obsługa komend głosowych

Włącz obsługę głosową w aplikacji, aby użytkownicy mogli wykonywać typowe czynności bez użycia rąk. Szczegółowe instrukcje wdrażania znajdziesz w artykule Obsługa komend głosowych w przypadku multimediów. W przypadku aplikacji do multimediów opartej na szablonie, jeśli otrzymasz polecenie głosowe, nie musisz aktualizować MediaBrowserService za pomocą wyników wyszukiwania. Zamiast tego rozważ dodanie działania w szablonie odtwarzania multimediów, aby umożliwić użytkownikowi znalezienie większej liczby treści na podstawie odtwarzania lub zapytania. Obsługa poleceń głosowych jest wymagana, aby spełnić wytyczne dotyczące jakości VC-1.

Tworzenie szablonu odtwarzania

Szablon MediaPlaybackTemplate wyświetla informacje o odtwarzaniu multimediów w aplikacji do multimediów w Bibliotece aplikacji na samochód. Ten szablon umożliwia ustawienie nagłówka z tytułem i dostosowywanymi działaniami, a informacje o multimediach i elementy sterujące odtwarzaniem są wypełniane przez hosta na podstawie stanu MediaSession aplikacji.

Odtwarzacz muzyki wyświetla utwór Sounds of Spring Summer Fielding z kwadratowym portretem kobiety grającej na gitarze.

Ilustracja 1. MediaPlaybackTemplate z działaniem w nagłówku, które umożliwia otwarcie kolejki u góry.

Ten przykład kodu pokazuje, jak utworzyć przykładowy szablon odtwarzania, który ustawia działanie nagłówka umożliwiające użytkownikowi przejście do ekranu z kolejką utworów.

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()

Gdy używasz MediaPlaybackTemplate, zarejestruj token MediaSession za pomocą MediaPlaybackManagerCarAppService. W przeciwnym razie podczas wysyłania do hosta żądania MediaPlaybackTemplate wyświetli się błąd.

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 jest niezbędne do udostępniania informacji o odtwarzaniu multimediów i elementów sterujących w Androidzie Auto. Jest to również ważne, aby host mógł tworzyć powiadomienia dotyczące konkretnych mediów.

Porządkowanie multimediów za pomocą szablonów

Do porządkowania multimediów, takich jak utwory lub albumy, zalecamy używanie komponentu SectionedItemTemplate, który umożliwia łączenie komponentów GridSection i RowSection w celu tworzenia układów zawierających listy obrazów i elementów tekstowych.

Interfejs aplikacji muzycznej wyświetla ostatnio odtwarzane utwory i albumy, w tym dwa pionowe rzędy i trzy poziome okładki albumów.

Ilustracja 2. Element SectionedItemTemplate zawierający element RowSection, a następnie element GridSection

Używanie elementu SectionedItemTemplate w szablonie TabTemplate

Wygodnym sposobem kategoryzowania multimediów w aplikacji jest użycie elementu SectionedItemTemplate w ramach elementu TabTemplate.

val template =
      SectionedItemTemplate.Builder()...build();
val tabTemplate = 
      TabTemplate.Builder(tabCallback)
          .setTabContents(TabContents.Builder(template).build)
          .setHeaderAction(Action.APP_ICON)
          
          .build();

Więcej informacji o projektowaniu interfejsu użytkownika aplikacji multimedialnej za pomocą tych szablonów znajdziesz w sekcji Aplikacje multimedialne.

Podczas przeglądania multimediów ważne jest, aby użytkownik mógł szybko przejść do MediaPlaybackTemplate przy minimalnym rozproszeniu uwagi. Aby spełnić wymagania dotyczące jakości MFT-1, aplikacja musi umożliwiać dostęp do MediaPlaybackTemplate ze wszystkich ekranów przeglądania multimediów.

Jeśli używasz SectionedItemTemplate, możesz to osiągnąć, dodając pływający przycisk polecenia, który przenosi użytkownika na ekran odtwarzania multimediów. W przypadku innych szablonów można to osiągnąć za pomocą działania w nagłówku.