Composants du système et flux d'utilisateurs

Le diagramme suivant illustre les composants qui interagissent avec Media :

Composants du système

Figure 1. Composants du système

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

Composant Description
Écran d'accueil Représente d'autres surfaces dans l'interface utilisateur de la voiture qui affichent et contrôlent le média en cours de lecture. Dans AOSP, il s’agit de l’écran principal affiché au démarrage du système. À partir de 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 standard et personnalisées (par exemple, Lecture et Pause).
Interface utilisateur du système Fournit des fonctionnalités qui incluent des options de navigation globales dans l'interface utilisateur, telles que la navigation vers les médias.
Assistants Android fournit des mécanismes permettant à 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 une chanson à la suite d'une commande vocale) ou accéder aux médias au premier plan (par exemple, lorsqu'une application d'assistant vocal est invitée à afficher l'interface utilisateur d'un source multimédia spécifique).
Lanceur d'application Toutes les applications Android démarrent dans le lanceur d'applications, y compris les sources multimédias. Les mé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 pour les médias.
Google Play Store Lorsque GAS est utilisé, c'est ici que les utilisateurs localisent et installent de nouvelles applications sur un appareil Android. Pour les médias, une fois les applications installées, les utilisateurs sont dirigés vers le média pour terminer le processus de connexion ou pour commencer à interagir avec l'application.
Gestionnaire de sessions multimédias Service système Android qui suit et contrôle les sessions multimédias de toutes les sources multimédias. Il fournit des mécanismes pour détecter quand une source multimédia devient la source multimédia de premier plan . Media et toutes les autres applications affichant la source multimédia en cours de lecture (par exemple, l'écran d'accueil) utilisent Media Session Manager pour détecter ces événements et mettre à jour l'interface utilisateur en conséquence. Les sources multimédias interagissent avec Media Session Manager au moyen de l' API Media Session .
Radio Application spécialisée pour interagir avec le matériel radio. Radio recherche les stations de radio, sélectionne rapidement les stations récemment identifiées et bascule entre les bandes radio. Les composants d'interface utilisateur partagés par la radio et les médias permettent à l'utilisateur de basculer entre les deux expériences.
Moteur de distraction du conducteur Service système Android utilisé pour imposer des restrictions UX en fonction de l'état de conduite de la voiture. Pour la connexion aux sources multimédias et les paramètres UX (où 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 état de 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 de blocage).

Flux d'utilisateurs

Lancement de l'application multimédia

Le processus qui lance Media apparaît ci-dessous.

Lancement de l'application multimédia

Figure 2. Lancement de l'application multimédia

Le média doit être lancé en utilisant le CAR_INTENT_ACTION_MEDIA_TEMPLATE implicite suivant. Cette intention peut avoir les informations suivantes en extra :

  • 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 Media doit se connecter. S'il n'est pas fourni, Media affiche l'application multimédia actuellement sélectionnée. Cette intention est utilisée à partir des points d'entrée suivants :

    • Interface utilisateur du système. Utilisé pour revenir à l'expérience Media ou pour commencer à l'utiliser pour la première fois. Dans ce cas, l'intention ci-dessus serait utilisée sans aucun extra 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 à Médias pour afficher l'application multimédia actuellement sélectionnée. Dans tous les cas, l'intention implicite sans extras est déclenchée.

    • Lanceur d'applications. Lorsque les utilisateurs sélectionnent une application multimédia à partir du lanceur d'application, l'intention ci-dessus inclut le supplément 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 plus de détails, consultez la section ci-dessous, Intégration du lanceur d'applications au média.

Lanceur d'applications à l'intégration multimédia

Les applications multimédias ne sont pas autorisées à proposer des activités annotées 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'application doit analyser le système à la recherche de packages implémentant MediaBrowserService.SERVICE_INTERFACE . Pour ces packages, App Launcher récupère l'icône de service similaire à celle utilisée pour récupérer d'autres activités.

  • App Launcher combine ensuite ces packages avec ceux qui implémentent les activités android.intent.category.LAUNCHER . Si une application fournit une implémentation MediaBrowserService et une activité de lancement, le service est prioritaire.

    Au moment d’écrire ces lignes, aucune application source multimédia ne peut fournir une activité de lancement.

  • Un exemple de cette logique peut être trouvé dans le code AOSP sur AppLauncherUtils#getAllLauncherApps() .

Flux de connexion et options de configuration

Les applications multimédias peuvent inclure une activité de paramètres optimisée pour le véhicule. Une telle activité peut être utilisée pour mettre en œuvre des flux d'utilisateurs non traités par les API Android Media, par exemple :

  • Se connecter
  • Se déconnecter
  • Changement de compte
  • Afficher auquel l'utilisateur est actuellement connecté (le cas échéant)
  • Configuration des services

Flux de connexion

Figure 3. Flux de connexion

Cette activité Paramètres est déclarée par l'application multimédia avec le filtre d'intention 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 médias doivent mettre en œuvre la logique suivante :

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

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

  • Si des restrictions UX de la voiture sont en vigueur (par exemple, la voiture bouge), cette possibilité doit être désactivée car l'activité des paramètres n'est pas une interface utilisateur optimisée pour le conducteur.

Gestion des erreurs et connexion requise

Les mé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 démarre lorsque l'application multimédia modifie PlaybackState en STATE_ERROR , y compris un code d'erreur spécifique (voir les détails ci-dessous). Lorsque cela se produit, Media affiche la description de l'erreur et une possibilité d'accéder à une activité de connexion mise en œuvre 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).

La gestion des erreurs

Figure 4. Gestion des erreurs

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 indiquerait 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'homme (par exemple, « Vous n'êtes pas connecté. »). Ce message doit être affiché à l'utilisateur et il doit s'agir d'une distraction de conduite optimisée (DO).

  • En option, PlaybackState peut inclure les extras 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 une chaîne contenant le message lisible par l'homme à afficher sur le bouton touché par l'utilisateur pour démarrer le flux de connexion.

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT . Défini avec un PendingIntent à déclencher 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.