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 sul Play Store. La pubblicazione nei canali aperti e di produzione sarà consentita in un secondo momento.

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

Questa guida presuppone che tu abbia già un'app multimediale che riproduce l'audio su uno smartphone e che l'app multimediale sia conforme all'architettura delle app multimediali Android. La biblioteca di app per auto ti consente di sostituire l'esperienza in-app con modelli anziché con quelli creati utilizzando la struttura di dati Crea app multimediali per auto MediaBrowser. 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 raccolta di app Android for Cars, per le app multimediali basate su modelli sono obbligatori 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 suo 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, la tua app deve anche dichiarare l'autorizzazione androidx.car.app.MEDIA_TEMPLATES nel 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, assicurati che il valore minimo Car App API level 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 manifest dell'app siano inclusi i seguenti elementi:

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

Aggiungi poi la dichiarazione del modello 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>

Fornisci un'icona di attribuzione

Assicurati di aggiungere un'icona di attribuzione per le app multimediali create utilizzando la raccolta di app Car.

Supportare le azioni vocali

Attiva la funzionalità vocale della tua app per consentire agli utenti di completare azioni comuni con i comandi vocali. Per istruzioni di implementazione più dettagliate, consulta la sezione Supportare le azioni vocali per i contenuti multimediali. Con un'app multimediale basata su modelli, se ricevi un comando vocale, non è necessario aggiornare MediaBrowserService con i risultati di ricerca. In alternativa, prendi in considerazione l'aggiunta di un'azione nel modello di riproduzione multimediale per consentire all'utente di trovare altri contenuti in base alla query di riproduzione o di ricerca. Il supporto dei comandi vocali è obbligatorio per soddisfare le linee guida sulla qualità di VC-1.

Creare il modello di riproduzione

MediaPlaybackTemplate mostra le informazioni sulla riproduzione dei contenuti multimediali nell'app multimediale della raccolta 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 del 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 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 è necessaria per esporre le informazioni e i controlli per la riproduzione dei contenuti multimediali ad Android Auto. È importante anche per l'organizzatore creare notifiche specifiche per i contenuti multimediali.

Organizzare i contenuti multimediali utilizzando i modelli

Per organizzare i contenuti multimediali da sfogliare, come brani o album, ti consigliamo di utilizzare il SectionedItemTemplate, che ti consente di utilizzare GridSection e RowSection insieme per creare layout che combinano elenchi di immagini e elementi di testo.

L&#39;interfaccia di un&#39;app di musica mostra i brani e gli album ascoltati di recente,
     tra cui due righe verticali e tre ritratti orizzontali della copertina dell&#39;album.

Figura 2: un SectionedItemTemplate contenente un RowSection followed by a GridSection

Utilizzo di SectionedItemTemplate all'interno di TabTemplate

Un modo pratico per classificare i contenuti multimediali all'interno della tua app è utilizzare il tag SectionedItemTemplate all'interno di un tag 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 sfoglia i contenuti multimediali, è importante che l'utente possa accedere rapidamente al MediaPlaybackTemplate con il minimo dispendio di energie. Per soddisfare il requisito di qualità MFT-1, la tua app deve avere un modo per accedere al MediaPlaybackTemplate da tutte le schermate di navigazione dei contenuti multimediali.

Se utilizzi SectionedItemTemplate, puoi farlo aggiungendo un pulsante di azione popup che ti indirizzi alla schermata di riproduzione dei contenuti multimediali. Per gli altri modelli, un'azione di intestazione è un altro modo per farlo.