Creare un'app multimediale basata su modelli

Le app multimediali basate su modelli sono in versione beta
Al momento, chiunque può pubblicare app multimediali basate su modelli nei canali di test interni e chiusi del Google Play Store. La pubblicazione nei canali aperti e di produzione sarà consentita in un secondo momento.

Le app multimediali che utilizzano i modelli della libreria di app per auto possono personalizzare l'esperienza di navigazione e riproduzione dei contenuti multimediali, assicurandosi che sia ottimizzata per gli schermi delle auto e riduca al minimo le distrazioni durante la guida.

Questa guida presuppone che tu abbia già un'app multimediale che riproduce audio su uno smartphone e che sia conforme all'architettura delle app multimediali Android. La libreria di app per auto ti consente di sostituire l'esperienza in-app con i modelli anziché con quelli creati utilizzando la struttura di dati MediaBrowserdi Build media apps for cars. Devi comunque fornire un MediaSession per i controlli di riproduzione e un MediaBrowserService, che viene utilizzato per i consigli e altre esperienze intelligenti.

Configurare il file manifest dell'app

Oltre ai passaggi descritti in Utilizzare la libreria di app Android for Cars, le app multimediali basate su modelli devono soddisfare i seguenti requisiti:

Dichiarare il supporto delle categorie nel file manifest

L'app deve dichiarare la androidx.car.app.category.MEDIA categoria di app per auto nel filtro per intent del relativo 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>

Per accedere a MediaPlaybackTemplate, l'app deve anche dichiarare l'autorizzazione androidx.car.app.MEDIA_TEMPLATES nel suo file manifest:

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

Impostare il livello API minimo dell'app per auto

Le app multimediali che utilizzano MediaPlaybackTemplate sono supportate solo nell'API CAL 8, quindi assicurati che il Car App API level minimo sia impostato su 8.

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

Dichiarare il supporto di Android Auto

Assicurati che nel file manifest dell'app sia incluso quanto segue:

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

Poi, aggiungi la dichiarazione template a automotive_app_desc.xml nelle risorse XML. Dovrebbe avere il seguente aspetto:

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

Fornire un'icona di attribuzione

Assicurati di aggiungere un'icona di attribuzione per le app multimediali create utilizzando la libreria di app per auto.

Supportare le azioni vocali

Abilita i comandi vocali nella tua app per consentire agli utenti di completare le azioni comuni senza utilizzare le mani. Per istruzioni di implementazione più dettagliate, consulta Supportare le azioni vocali per i contenuti multimediali. Con un'app multimediale basata su modelli, se ricevi un comando vocale, non devi aggiornare MediaBrowserService con i risultati di ricerca. In alternativa, valuta la possibilità di aggiungere un'azione nel modello di riproduzione dei contenuti multimediali per consentire all'utente di trovare altri contenuti in base alla riproduzione o alla query di ricerca. Il supporto dei comandi vocali è obbligatorio per soddisfare la VC-1 linea guida sulla qualità.

Creare il modello di riproduzione

Il MediaPlaybackTemplate mostra le informazioni sulla riproduzione dei contenuti multimediali nell'app multimediale della libreria di app per auto. Questo modello consente di impostare un'intestazione con un titolo e azioni personalizzabili, mentre le informazioni sui contenuti multimediali e i controlli di riproduzione vengono compilati dall'host in base allo stato di MediaSession dell'app.

Un lettore musicale mostra Sounds of Spring di Summer Fielding con un
     ritratto quadrato di una donna che suona la chitarra.

Figura 1: MediaPlaybackTemplate con un'azione di intestazione per aprire la coda nella parte superiore.

Questo esempio di codice mostra come creare un modello di riproduzione di esempio che imposta un'azione di intestazione che consente all'utente di passare a una schermata con la coda dei brani.

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

Quando utilizzi MediaPlaybackTemplate, registra un MediaSession token utilizzando MediaPlaybackManager in your CarAppService. In caso contrario, viene visualizzato un errore quando viene inviato un MediaPlaybackTemplate all'host.

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 è necessario per esporre le informazioni e i controlli di riproduzione dei contenuti multimediali ad Android Auto. È importante anche che l'host crei notifiche specifiche per i contenuti multimediali.

Organizzare i contenuti multimediali utilizzando i modelli

Per organizzare i contenuti multimediali per la navigazione, ad esempio brani o album, ti consigliamo di utilizzare la SectionedItemTemplate, che ti consente di utilizzare GridSection e RowSection insieme per creare layout che combinano elenchi di immagini ed elementi di testo.

L&#39;interfaccia di un&#39;app musicale mostra brani e album ascoltati di recente,
     tra cui due righe verticali e tre ritratti orizzontali di copertine di album.

Figura 2: un SectionedItemTemplate contenente un RowSection seguito da un GridSection

Utilizzare SectionedItemTemplate all'interno di TabTemplate

Un modo pratico per classificare i contenuti multimediali all'interno dell'app è utilizzare i SectionedItemTemplate all'interno di un TabTemplate.

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

Per ulteriori dettagli su come progettare l'interfaccia utente dell'app multimediale utilizzando questi modelli, consulta App multimediali.

Quando si sfogliano i contenuti multimediali, è importante che l'utente possa passare rapidamente a MediaPlaybackTemplate con il minimo disturbo. Per soddisfare il MFT-1 requisito di qualità, l'app deve avere un modo per accedere a MediaPlaybackTemplate da tutte le schermate di navigazione dei contenuti multimediali.

Se utilizzi SectionedItemTemplate, puoi farlo aggiungendo un Floating Action Button (FAB) che ti porta alla schermata di riproduzione dei contenuti multimediali. Per altri modelli, un'azione di intestazione è un altro modo per farlo.