Composants système et parcours utilisateur

Le diagramme suivant illustre les composants qui interagissent avec Media:

Composants système

Figure 1 : Composants système

Les éléments de cette figure sont décrits dans le tableau suivant:

Component Description
Écran d'accueil Représente d'autres surfaces de l'interface utilisateur de la voiture qui affichent et contrôlent le contenu multimédia en cours de lecture. Dans AOSP, il s'agit de l'écran principal qui s'affiche au démarrage du système. Sur cet écran, les utilisateurs peuvent afficher les détails de l'élément multimédia en cours de lecture et exécuter un ensemble limité d'actions standards et personnalisées (par exemple, lecture et pause).
Interface Fournit des fonctionnalités qui incluent des options de navigation dans l'UI globale, telles que la navigation vers les contenus multimédias.
Assistants Android fournit des mécanismes permettant aux différentes applications d'assistant vocal d'interagir avec le système. Ces applications peuvent interagir avec les sources multimédias en arrière-plan (par exemple, lire un titre à la suite d'une commande vocale) ou accéder aux contenus multimédias au premier plan (par exemple, lorsqu'une application d'assistant vocal est invitée à afficher l'interface utilisateur d'une source multimédia spécifique).
App Launcher Toutes les applications Android démarrent dans le lanceur d'applications, y compris les sources multimédias. Les contenus multimédias peuvent présenter leur propre sélecteur de source multimédia, complétant ou remplaçant le lanceur d'applications comme point de départ des contenus multimédias.
Google Play Store Lorsque GAS est utilisé, c'est là que les utilisateurs recherchent et installent de nouvelles applications sur un appareil Android. Pour les contenus multimédias, une fois les applications installées, les utilisateurs sont redirigés vers le contenu multimédia pour terminer le processus de connexion ou commencer à interagir avec l'application.
Gestionnaire de session multimédia Service système Android qui suit et contrôle les sessions multimédias de toutes les sources multimédias. Il fournit des mécanismes permettant de détecter quand une source multimédia devient la source multimédia de premier plan. Les contenus multimédias et toutes les autres applications affichant la source multimédia en cours de lecture (par exemple, l'écran d'accueil) utilisent le Gestionnaire de session multimédia pour détecter ces événements et mettre à jour l'UI en conséquence. Les sources multimédias interagissent avec le Gestionnaire de sessions multimédias à l'aide de l'API Media Session.
Radio Application spécialisée pour interagir avec le matériel radio. La radio recherche des stations de radio, sélectionne rapidement les stations récemment identifiées et passe d'une bande de radio à une autre. Les composants d'UI partagés par Radio et Media permettent à l'utilisateur de basculer entre les deux expériences.
Moteur de détection des distractions du conducteur Service système Android utilisé pour imposer des restrictions d'expérience utilisateur en fonction de l'état de conduite de la voiture. Pour l'expérience utilisateur de connexion et de paramétrage des sources multimédias (lorsque l'écran est contrôlé directement par les sources multimédias), ce service garantit qu'aucun contenu dangereux n'est affiché lorsque la voiture est en mode conduite. Les OEM peuvent personnaliser la définition de ces états et la façon dont le système réagit dans ces situations (par exemple, en affichant une superposition d'écran bloquant).

Parcours utilisateur

Lancement de l'application multimédia

Le processus qui lance Media s'affiche ci-dessous.

Lancement de l'application multimédia

Figure 2. Lancement de l'application multimédia

Les contenus multimédias doivent être lancés à l'aide de l'CAR_INTENT_ACTION_MEDIA_TEMPLATE implicite suivante. Cet intent peut contenir les informations suivantes en tant que informations supplémentaires:

  • android.car.intent.extra.MEDIA_COMPONENT (facultatif). Chaîne supplémentaire pour représenter le nom de composant aplati d'un MediaBrowserService dans l'application multimédia à laquelle le contenu multimédia doit se connecter. Si elle n'est pas fournie, Media affiche l'application multimédia actuellement sélectionnée. Cet intent est utilisé à partir des points d'entrée suivants:

    • UI du système. Permet de revenir à l'expérience multimédia ou de l'utiliser pour la première fois. Dans ce cas, l'intent ci-dessus serait utilisé sans aucun élément supplémentaire afin que Media affiche l'application multimédia actuellement sélectionnée.

    • Écran d'accueil, assistants et Centre de notifications Les utilisateurs peuvent accéder à "Media" pour afficher l'application multimédia actuellement sélectionnée. Dans tous les cas, l'intent implicite sans extras est déclenché.

    • Lanceur d'applications Lorsque les utilisateurs sélectionnent une application multimédia dans le lanceur d'applications, l'intent ci-dessus inclut l'extra CAR_EXTRA_MEDIA_COMPONENT, qui contient l'application multimédia sélectionnée. Media la désigne comme l'application nouvellement sélectionnée et s'y connecte. Pour en savoir plus, consultez la section ci-dessous, "Intégration du lanceur d'applications à Media".

Intégration du lanceur d'applications à Media

Les applications multimédias ne sont pas autorisées à fournir d'activité annotée avec la catégorie android.intent.category.LAUNCHER. Par conséquent, le lanceur d'applications (ou son équivalent) doit implémenter une logique spéciale pour gérer l'intégration des sources multimédias:

  • Le lanceur d'applications doit rechercher dans le système les packages implémentant MediaBrowserService.SERVICE_INTERFACE. Pour ces packages, le lanceur d'applications extrait l'icône de service semblable à celle utilisée pour extraire d'autres activités.

  • Le lanceur d'applications combine ensuite ces packages avec ceux qui implémentent des activités android.intent.category.LAUNCHER. Si une application fournit une implémentation MediaBrowserService et une activité de lanceur d'applications, le service a la priorité.

    Au moment de la rédaction de cet article, aucune application de source multimédia ne peut fournir une activité de lanceur d'applications.

  • Vous trouverez un exemple de cette logique dans le code AOSP à l'adresse AppLauncherUtils#getAllLauncherApps().

Flux de connexion et options de configuration

Les applications multimédias peuvent inclure une activité de paramétrage optimisée pour les véhicules. Une telle activité peut être utilisée pour implémenter des flux utilisateur non gérés par les API Android Media, par exemple:

  • Se connecter
  • Se déconnecter
  • Changement de compte
  • Affichage de l'utilisateur actuellement connecté (le cas échéant)
  • Configuration de service

Flux de connexion

Figure 3. Flux de connexion

Cette activité de paramètres est déclarée par l'application multimédia avec le filtre d'intent suivant:

<activity android:name=".AppSettingsActivity"
          android:exported="true
          android:theme="@style/SettingsActivity"
           android:label="@string/app_settings_activity_title">
   <intent-filter>
       <action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
   </intent-filter>
</activity>

Les contenus multimédias doivent implémenter la logique suivante:

  • Vérifiez que l'application multimédia actuellement sélectionnée inclut une activité avec le filtre d'intent donné.

  • Si tel est le cas, autorisez l'utilisateur à accéder à l'activité.

  • Si des restrictions liées à l'expérience utilisateur du véhicule sont en vigueur (par exemple, si la voiture est en mouvement), cette affordance doit être désactivée, car l'activité "Paramètres" n'est pas une UI optimisée pour le conducteur.

Traitement des erreurs et connexion requise

Les contenus multimédias interagissent avec les applications multimédias via l'API Android Media Session. Dans le cadre de cette API, Media reçoit un objet PlaybackState, qui communique l'état actuel de l'application multimédia.

Le processus de connexion commence lorsque l'application multimédia passe de PlaybackState à STATE_ERROR, avec un code d'erreur spécifique (voir les détails ci-dessous). Dans ce cas, Media affiche la description de l'erreur et une affordance permettant d'accéder à une activité de connexion implémentée par l'application multimédia.

Ce même flux peut être utilisé par les applications pour signaler d'autres situations d'erreur (par exemple, une erreur de connectivité du serveur).

Gestion des exceptions

Figure 4. Gestion des exceptions

Dans le cadre de la gestion normale des erreurs PlaybackState, Media doit vérifier l'entrée suivante.

  • Code d'erreur PlaybackState égal à PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED. Cela indique que l'application multimédia nécessite une connexion pour continuer à fonctionner. D'autres codes d'erreur peuvent être reçus, ce qui indique d'autres types de situations d'erreur.

  • Le message d'erreur PlaybackState (défini par les applications multimédias à l'aide de la méthode PlaybackStateCompat.Builder#setErrorMessage) contient une explication lisible par l'utilisateur (par exemple, "Vous n'êtes pas connecté."). Ce message doit être présenté à l'utilisateur et être optimisé pour la conduite (DO).

  • PlaybackState peut éventuellement inclure les éléments supplémentaires suivants (définis par les applications multimédias avec la méthode PlaybackStateCompat.Builder#setExtras) avec les clés suivantes.

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL. Définissez cette valeur sur une chaîne contenant le message lisible à afficher sur le bouton enfoncé par l'utilisateur pour lancer le parcours de connexion.

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT. Défini avec un PendingIntent pour être déclenché lorsque l'utilisateur clique sur le bouton mentionné ci-dessus. Ce PendingIntent pointe vers une activité de connexion personnalisée implémentée par la même application multimédia.

  • L'état PlaybackState est égal à STATE_ERROR. Cela indique qu'aucune autre opération n'est possible tant que la connexion n'est pas terminée.