Créer une application multimédia basée sur des modèles

Les applications multimédias basées sur des modèles sont en version bêta
Pour le moment, tout le monde peut publier des applications multimédias basées sur des modèles dans les canaux de tests internes et fermés du Google Play Store. La publication sur des canaux ouverts et de production sera autorisée ultérieurement.

Les applications multimédias qui utilisent les modèles de la bibliothèque d'applications pour voiture peuvent personnaliser leur expérience de navigation et de lecture de contenus multimédias tout en s'assurant qu'elle est optimisée pour les écrans de voiture et qu'elle minimise les distractions au volant.

Dans ce guide, nous partons du principe que vous disposez déjà d'une application multimédia qui lit du contenu audio sur un téléphone et que cette application est conforme à l'architecture des applications multimédias Android. La bibliothèque d'applications pour voitures vous permet de remplacer l'expérience dans l'application par des modèles au lieu de ceux créés à l'aide de la structure de données MediaBrowser de la page Créer des applications multimédias pour voitures. Vous devez toujours fournir un MediaSession pour les commandes de lecture et un MediaBrowserService, qui est utilisé pour les recommandations et autres expériences intelligentes.

Configurer le fichier manifeste de votre application

En plus des étapes décrites dans Utiliser la bibliothèque d'applications Android for Cars, les applications multimédias basées sur des modèles doivent respecter les exigences suivantes :

Déclarer la catégorie compatible dans votre fichier manifeste

Votre application doit déclarer la catégorie d'applications automobiles androidx.car.app.category.MEDIA dans le filtre d'intent de son 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>

Pour accéder à MediaPlaybackTemplate, votre application doit également déclarer l'autorisation androidx.car.app.MEDIA_TEMPLATES dans son fichier manifeste :

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

Définir le niveau d'API minimal de l'application pour voiture

Les applications multimédias utilisant MediaPlaybackTemplate ne sont compatibles qu'avec l'API CAL 8. Assurez-vous que votre Car App API level minimal est défini sur 8.

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

Déclarer la prise en charge d'Android Auto

Assurez-vous que les éléments suivants sont inclus dans le fichier manifeste de votre application :

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

Ajoutez ensuite la déclaration template à automotive_app_desc.xml dans vos ressources XML. Voici le résultat attendu :

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

Fournir une icône d'attribution

Veillez à ajouter une icône d'attribution pour les applications multimédias créées à l'aide de la bibliothèque Car App.

Accepter les commandes vocales

Activez la commande vocale dans votre application pour permettre aux utilisateurs d'effectuer des actions courantes en mode mains libres. Pour obtenir des instructions d'implémentation plus détaillées, consultez Accepter les commandes vocales pour les contenus multimédias. Avec une application multimédia basée sur un modèle, si vous recevez une commande vocale, vous n'avez pas besoin de mettre à jour votre MediaBrowserService avec les résultats de recherche. Envisagez plutôt d'ajouter une action dans votre modèle de lecture multimédia pour permettre à l'utilisateur de trouver plus de contenu en fonction de cette requête de lecture ou de recherche. La prise en charge des commandes vocales est requise pour respecter la consigne de qualité VC-1.

Créer votre modèle de lecture

Le MediaPlaybackTemplate affiche les informations de lecture multimédia dans l'application multimédia de votre bibliothèque d'applications pour voitures. Ce modèle permet de définir un en-tête avec un titre et des actions personnalisables, tandis que les informations multimédias et les commandes de lecture sont renseignées par l'hôte en fonction de l'état du MediaSession de votre application.

Un lecteur de musique affiche &quot;Sounds of Spring&quot; de Summer Fielding avec un portrait carré d&#39;une femme jouant de la guitare.

Figure 1 : MediaPlaybackTemplate avec une action d'en-tête pour ouvrir la file d'attente en haut.

Cet exemple de code montre comment créer un exemple de modèle de lecture qui définit une action d'en-tête permettant à l'utilisateur d'accéder à un écran contenant la file d'attente des titres.

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

Lorsque vous utilisez MediaPlaybackTemplate, enregistrez un jeton MediaSession à l'aide de MediaPlaybackManager dans votre CarAppService. Dans le cas contraire, une erreur s'affiche lorsqu'un MediaPlaybackTemplate est envoyé à l'hôte.

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 est nécessaire pour exposer les informations et les commandes de lecture multimédia à Android Auto. Cela permet également à l'hôte de créer des notifications spécifiques aux contenus multimédias.

Organiser des contenus multimédias à l'aide de modèles

Pour organiser les contenus multimédias à parcourir, comme les titres ou les albums, nous vous recommandons d'utiliser SectionedItemTemplate, qui vous permet d'utiliser GridSection et RowSection ensemble pour créer des mises en page qui combinent des listes d'images et des éléments de texte.

L&#39;interface d&#39;une application musicale affiche les titres et albums récemment écoutés, y compris deux rangées verticales et trois rangées horizontales de pochettes d&#39;album.

Figure 2 : SectionedItemTemplate contenant un RowSection suivi d'un GridSection

Utiliser SectionedItemTemplate dans un TabTemplate

Une façon pratique de catégoriser les contenus multimédias dans votre application consiste à utiliser SectionedItemTemplate dans un TabTemplate.

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

Pour en savoir plus sur la conception de l'interface utilisateur de votre application multimédia à l'aide de ces modèles, consultez Applications multimédias.

Lorsqu'il parcourt des contenus multimédias, il est important que l'utilisateur puisse accéder rapidement à MediaPlaybackTemplate avec un minimum de distraction. Pour répondre à l'exigence de qualité MFT-1, votre application doit permettre d'accéder à MediaPlaybackTemplate depuis tous les écrans de navigation multimédia.

Si vous utilisez SectionedItemTemplate, vous pouvez y parvenir en ajoutant un bouton d'action flottant qui vous redirige vers l'écran de lecture multimédia. Pour les autres modèles, une action d'en-tête est une autre façon d'y parvenir.