Implémentation de la radiocommande

L'implémentation du contrôle de la radio est basée sur MediaSession et MediaBrowse, qui permettent aux applications multimédias et d'assistant vocal de contrôler la radio. Pour en savoir plus, consultez Créer des applications multimédias pour voitures sur developer.android.com.

Une implémentation d'arborescence de navigation multimédia est fournie dans la bibliothèque car-broadcastradio-support dans packages/apps/Car/libs. Cette bibliothèque contient également des extensions de ProgramSelector pour convertir des URI et en convertir. Nous vous recommandons d'utiliser cette bibliothèque pour créer l'arborescence de navigation associée.

Sélecteur de source multimédia

Pour assurer une transition fluide entre la radio et les autres applications affichées dans les contenus multimédias, la bibliothèque car-media-common contient des classes qui doivent être intégrées à l'application de radio. MediaAppSelectorWidget peut être inclus dans le fichier XML de l'application de radio (l'icône et le menu déroulant utilisés dans les applications multimédias et de radio de référence):

<com.android.car.media.common.MediaAppSelectorWidget
    android:id="@+id/app_switch_container"
    android:layout_width="@dimen/app_switch_widget_width"
    android:layout_height="wrap_content"
    android:background="@drawable/app_item_background"
    android:gravity="center" />

Ce widget lance AppSelectionFragment, qui affiche une liste des sources multimédias auxquelles vous pouvez passer. Si vous souhaitez utiliser une UI autre que celle fournie, vous pouvez créer un widget personnalisé pour lancer le AppSelectionFragment lorsque le sélecteur doit s'afficher.

AppSelectionFragment newFragment = AppSelectionFragment.create(widget,
            packageName, fullScreen);
    newFragment.show(mActivity.getSupportFragmentManager(), null);

Un exemple d'implémentation est fourni dans l'implémentation de référence de l'application de radio, située dans packages/apps/Car/Radio.

Spécifications détaillées des commandes

L'interface MediaSession (via MediaSession.Callback) fournit des mécanismes de contrôle pour le programme radio en cours de lecture:

  • onPlay, onStop. Activer/Désactiver le son de la radio.
  • onPause : mise en pause avec décalage temporel (si compatible).
  • onPlayFromMediaId : lire n'importe quel contenu à partir d'un dossier racine. Par exemple, "Écouter la radio FM" ou "Écouter la radio".
  • onPlayFromUri. Écoutez une fréquence spécifique. Par exemple, "Mets 88,5 FM".
  • onSkipToNext, onSkipToPrevious. Passer à la station suivante ou précédente.
  • onSetRating : ajoutez ou supprimez des favoris.

MediaBrowser expose un MediaItem ajustable sur trois types de répertoires de premier niveau:

  • (Facultatif) Programmes (chaînes). Ce mode est généralement utilisé par les radios à double tuner pour indiquer toutes les stations de radio disponibles à l'emplacement de l'utilisateur.
  • Favoris Certains des programmes radio ajoutés à la liste "Favoris" peuvent être indisponibles (hors de portée de réception).
  • Canaux de bande. Tous les canaux physiquement possibles dans la région actuelle (87,9, 88,1, 88,3, 88,5, 88,7, 88,9, 89,1, etc.). Chaque bande dispose d'un répertoire de premier niveau distinct.
Structure arborescente de MediaBrowserService
Figure 2 Structure arborescente de MediaBrowserService

Chaque élément de chacun de ces dossiers (AM/FM/Programmes) est un MediaItem avec un URI pouvant être utilisé avec MediaSession pour régler la fréquence. Chaque dossier racine (AM/FM/Programmes) est un MediaItem avec un mediaId qui peut être utilisé avec MediaSession pour déclencher la lecture. Il est à la discrétion de l'OEM. Par exemple, "Mets la radio FM", "Mets la radio AM" et "Mets la radio" sont toutes des requêtes radio non spécifiques qui utilisent un mediaId à envoyer à l'application radio OEM. C'est à l'application radio de déterminer ce qu'elle doit diffuser à partir de la requête générique et du mediaId.

MediaSession

Étant donné qu'il n'existe pas de concept de mise en pause d'un flux de diffusion, les actions de lecture, de mise en pause et d'arrêt ne s'appliquent pas toujours à la radio. Avec la radio, l'action "Arrêter" est associée à la désactivation du son du flux, tandis que l'action "Lire" est associée à la réactivation du son.

Certains tuners radio (ou applications) permettent de simuler une pause de flux de diffusion en mettant en cache le contenu, puis en le lisant plus tard. Dans ce cas, utilisez onPause.

La lecture à partir des actions mediaId et URI vise à se connecter à une station extraite de l'interface MediaBrowser. Le mediaId est une chaîne arbitraire fournie par l'application de radio pour imposer une valeur unique (de sorte qu'un ID donné ne pointe que vers un seul élément) et stable (de sorte qu'un élément donné ait le même ID pendant toute la session) permettant d'identifier une station donnée. L'URI sera d'un schéma bien défini. En résumé, il s'agit d'une forme URI de ProgramSelector. Bien que cela préserve l'attribut d'unicité, il n'a pas besoin d'être stable, bien qu'il puisse changer lorsque la station passe à une autre fréquence.

Par conception, onPlayFromSearch n'est pas utilisé. Il incombe au client (application associée) de sélectionner un résultat de recherche dans l'arborescence MediaBrowser. Transférer cette responsabilité à l'application de radio augmenterait la complexité, nécessiterait des contrats formels sur la façon dont les requêtes de chaîne doivent apparaître et entraînerait une expérience utilisateur inégale sur différentes plates-formes matérielles.

Remarque:L'application de radio ne contient pas d'informations supplémentaires qui seraient utiles pour rechercher un nom de station non exposé au client via l'interface MediaBrowser.

Le passage à la station suivante ou précédente dépend du contexte actuel:

  • Lorsqu'une application est réglée sur une station de la liste des favoris, elle peut passer à la station suivante de la liste.
  • Écouter une station de la liste des programmes peut entraîner la sélection de la station suivante disponible, triée par numéro de chaîne.
  • L'écoute d'un canal arbitraire peut entraîner le réglage sur le canal physique suivant, même en l'absence de signal de diffusion.

L'application de radio gère ces actions.

Gestion des exceptions

Les actions TransportControls (Lire, Arrêter et Suivant) n'indiquent pas si l'action aboutit ou non. Le seul moyen d'indiquer une erreur consiste à définir l'état de MediaSession sur STATE_ERROR avec un message d'erreur.

L'application de radio doit gérer ces actions et les exécuter ou définir un état d'erreur. Si l'exécution de la commande de lecture n'est pas immédiate, l'état de lecture doit être défini sur STATE_CONNECTING (en cas de réglage direct) ou STATE_SKIPPING_TO_PREVIOUS ou NEXT pendant l'exécution de la commande.

Le client doit surveiller PlaybackState et vérifier que la session a remplacé le programme actuel par ce qui a été demandé ou est entré dans l'état d'erreur. STATE_CONNECTING ne doit pas dépasser 30 secondes. Toutefois, la mise au point directe sur une fréquence AM/FM donnée devrait être beaucoup plus rapide.

Ajouter et supprimer des favoris

MediaSession est compatible avec les classifications, ce qui permet de contrôler les favoris. onSetRating appelé avec une note de type RATING_HEART ajoute ou supprime la station actuellement sélectionnée dans la liste des favoris.

Contrairement aux anciens préréglages, ce modèle suppose une liste de favoris non ordonnée et illimitée, alors que chaque favori enregistré était attribué à un emplacement numérique (généralement de 1 à 6). Par conséquent, les systèmes basés sur des préréglages seraient incompatibles avec l'opération onSetRating.

La limite de l'API MediaSession est que seule la station actuellement sélectionnée peut être ajoutée ou supprimée. Par exemple, les éléments doivent d'abord être sélectionnés avant de pouvoir être supprimés. Il ne s'agit que d'une limitation du client MediaBrowser, comme une application associée. L'application de radio n'est pas soumise à la même restriction. Cette partie est facultative lorsqu'une application n'est pas compatible avec les favoris.

Navigateur multimédia

Pour indiquer quelles fréquences ou noms de canaux physiques (lorsque le réglage sur un canal arbitraire est adapté à une technologie radio donnée) sont valides pour une région donnée, tous les canaux (fréquences) valides sont listés pour chaque bande. Aux États-Unis, cela représente 101 canaux FM dans la plage de fréquences de 87,8 à 108 MHz (avec un espacement de 0,2 MHz) et 117 canaux AM dans la plage de fréquences de 530 à 1 700 kHz (avec un espacement de 10 kHz). Étant donné que la radio HD utilise le même espace de canaux, elle n'est pas présentée séparément.

La liste des programmes radio actuellement disponibles est plate, ce qui n'autorise pas les schémas d'affichage tels que le regroupement par ensemble de diffusion audio directe (DAB).

Il est possible que les entrées de la liste de favoris ne soient pas configurables. Par exemple, si un programme donné est hors plage. L'application de radio peut détecter ou non si la saisie peut être réglée à l'avance. Dans ce cas, il est possible qu'il ne marque pas l'entrée comme jouable.

Pour identifier les dossiers racines, le même mécanisme que celui utilisé par le Bluetooth est appliqué. Autrement dit, un lot d'extras de l'objet MediaDescription contient un champ spécifique au tuner, comme le fait Bluetooth avec EXTRA_BT_FOLDER_TYPE. Dans le cas de la radiodiffusion, cela conduit à définir les nouveaux champs suivants dans l'API publique:

  • EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE". L'une des valeurs suivantes :
    • BCRADIO_FOLDER_TYPE_PROGRAMS = 1 : programmes actuellement disponibles.
    • BCRADIO_FOLDER_TYPE_FAVORITES = 2. Favoris.
    • BCRADIO_FOLDER_TYPE_BAND = 3 : tous les canaux physiques d'une bande donnée.

    Il n'est pas nécessaire de définir des champs de métadonnées personnalisées spécifiques à la radio, car toutes les données pertinentes s'intègrent au schéma MediaBrowser.MediaItem existant:

    • Nom du programme (PS RDS, nom du service DAB). MediaDescription.getTitle.
    • Fréquence FM. URI (voir ProgramSelector) ou MediaDescription.getTitle (si une entrée se trouve dans le dossier BROADCASTRADIO_FOLDER_TYPE_BAND).
    • Identifiants spécifiques à la radio (PI RDS, SID DAB). MediaDescription.getMediaUri analysé en ProgramSelector.

    En règle générale, il n'est pas nécessaire d'extraire la fréquence FM pour une entrée dans le programme en cours ou la liste des favoris (car le client doit fonctionner sur les ID multimédias). Toutefois, si un tel besoin se présente (par exemple, à des fins d'affichage), il est présent dans l'URI et peut être analysé en ProgramSelector. Toutefois, il n'est pas recommandé d'utiliser l'URI pour sélectionner des éléments dans la session en cours. Pour en savoir plus, consultez ProgramSelector.

    Pour éviter les problèmes de performances ou liés au liaisonneur, le service MediaBrowser doit prendre en charge la pagination:

    Remarque:Par défaut, la pagination est implémentée dans la variante onLoadChildren() sans gestion des options.

    Les entrées associées de tous les types de listes (chaînes brutes, programmes trouvés et favoris) peuvent avoir des mediaIds différents (cela dépend de l'application de radio ; la bibliothèque d'assistance les aura différents). Les URI (sous forme de ProgramSelector) diffèrent dans la plupart des cas entre les canaux bruts et les programmes trouvés (sauf pour la FM sans RDS), mais sont généralement les mêmes entre les programmes trouvés et les favoris (sauf, par exemple, lorsque l'AF a été mise à jour).

    Avoir des mediaIds différents pour les entrées de différents types de listes permet d'effectuer différentes actions dessus. Vous pouvez parcourir la liste "Favoris" ou la liste "Tous les programmes" sur onSkipToNext, en fonction du dossier de MediaItem récemment sélectionné (voir MediaSession).

    Actions spéciales pour les titres

    La liste des programmes permet aux utilisateurs de se connecter à une station spécifique, mais ne leur permet pas de formuler des requêtes générales telles que "Syntoniser la bande FM", ce qui pourrait entraîner la connexion à une station récemment écoutée sur la bande FM.

    Pour prendre en charge ces actions, l'indicateur FLAG_PLAYABLE est défini pour certains répertoires de premier niveau (avec FLAG_BROWSABLE pour les dossiers).

    Action Sélectionne Émettre un ordre
    Écouter la radio N'importe quelle chaîne de radio startService(ACTION_PLAY_BROADCASTRADIO)

    OU

    playFromMediaId(MediaBrowser.getRoot())
    Mets la FM N'importe quelle chaîne FM Lire à partir de la mediaId de la bande FM

    C'est l'application qui détermine le programme à regarder. Il s'agit généralement de la chaîne sur laquelle l'utilisateur s'est connecté pour la dernière fois dans la liste donnée. Pour en savoir plus sur ACTION_PLAY_BROADCASTRADIO, consultez la section Intents de lecture généraux.

    Détection et connexion au service

    PackageManager peut trouver directement l'arborescence de diffusion de MediaBrowserService. Pour ce faire, appelez resolveService avec l'intent ACTION_PLAY_BROADCASTRADIO (voir Intents de lecture généraux) et l'indicateur MATCH_SYSTEM_ONLY. Pour trouver tous les services qui diffusent de la radio (il peut y en avoir plusieurs, par exemple AM/FM et satellite séparés), utilisez queryIntentServices.

    Le service résolu gère également l'intent de liaison android.media.browse.MediaBrowserService. Cette information est confirmée par GTS.

    Pour vous connecter au MediaBrowserService sélectionné, créez une instance MediaBrowser pour un composant de service donné et connect. Une fois la connexion établie, un gestionnaire de MediaSession peut être obtenu via getSessionToken.

    L'application Radio peut limiter les packages client autorisés à se connecter dans une implémentation onGetRoot de son service. L'application doit autoriser les applications système à se connecter sans liste blanche. Pour en savoir plus sur la liste blanche, consultez la section Accepter le package et la signature de l'application Assistant.

    Si l'application spécifique à la source (par exemple, une application de radio) est installée sur un appareil sans prise en charge de cette source, elle s'annonce toujours comme gérant l'intent ACTION_PLAY_BROADCASTRADIO, mais son arbre MediaBrowser ne contient pas de balises spécifiques à la radio. Par conséquent, un client qui souhaite vérifier si une source donnée est disponible sur un appareil doit:

    1. Découvrez le service de radio (appelez resolveService pour ACTION_PLAY_BROADCASTRADIO).
    2. Créez MediaBrowser, puis connectez-vous-y.
    3. Déterminez la présence de MediaItem avec un élément supplémentaire EXTRA_BCRADIO_FOLDER_TYPE.

    Remarque : Dans la plupart des cas, le client doit analyser tous les arbres MediaBrowser disponibles pour détecter toutes les sources disponibles pour un appareil donné.

    Noms de groupes

    La liste des canaux est représentée par un ensemble de répertoires racine avec une balise de type de dossier définie sur BCRADIO_FOLDER_TYPE_BAND. Les titres de leurs MediaItem sont des chaînes localisées représentant les noms de groupes. Dans la plupart des cas, il s'agit de la même traduction en anglais, mais le client ne peut pas s'appuyer sur cette hypothèse.

    Pour fournir un mécanisme stable permettant de rechercher certaines bandes, une balise supplémentaire est ajoutée pour les dossiers de bandes, EXTRA_BCRADIO_BAND_NAME_EN. Il s'agit d'un nom non localisé de la bande et ne peut prendre que l'une des valeurs prédéfinies suivantes:

    • AM
    • FM
    • DAB

    Si le groupe ne figure pas dans cette liste, la balise de nom de groupe ne doit pas être définie. Toutefois, si la bande figure dans la liste, une balise doit être définie. La radio HD n'énumère pas de bandes distinctes, car elle utilise le même support sous-jacent que la radio AM/FM.

    Intents de jeu généraux

    Chaque application dédiée à la lecture d'une source donnée (comme la radio ou le CD) doit gérer un intent play général pour commencer à lire du contenu, éventuellement à partir d'un état inactif (par exemple, après le démarrage). C'est à l'application de sélectionner le contenu à lire, mais il s'agit généralement du programme de radio ou du titre de CD récemment écouté.Un intent distinct est défini pour chaque source audio:

    • android.car.intent.action.PLAY_BROADCASTRADIO
    • android.car.intent.action.PLAY_AUDIOCD: CD-DA ou CD-Text
    • android.car.intent.action.PLAY_DATADISC: disque de données optique tel qu'un CD/DVD, mais pas un CD-DA (peut être un CD en mode mixte)
    • android.car.intent.action.PLAY_AUX: sans spécifier le port auxiliaire
    • android.car.intent.action.PLAY_BLUETOOTH
    • android.car.intent.action.PLAY_USB: sans spécifier le périphérique USB
    • android.car.intent.action.PLAY_LOCAL: stockage multimédia local (flash intégré)

    Les intents ont été choisis pour la commande de lecture générale, car ils résolvent deux problèmes à la fois: la commande de lecture générale elle-même et la détection de services. L'avantage supplémentaire d'un tel intent serait la possibilité d'exécuter une action simple sans ouvrir la session MediaBrowser.

    La découverte de services est en fait le problème le plus important résolu avec ces intents. La procédure de détection de services est ainsi simple et sans ambiguïté (voir la section Détection et connexion de services).

    Pour faciliter certaines implémentations client, il existe une autre méthode d'émission de cette commande Play (qui doit également être implémentée par l'application de radio) : l'émission de playFromMediaId avec le rootId du nœud racine (utilisé comme mediaId). Bien que le nœud racine ne soit pas destiné à être lu, son rootId est une chaîne arbitraire qui peut être consommée en tant que mediaId. Toutefois, les clients ne sont pas tenus de comprendre cette nuance.

    ProgramSelector

    Bien que mediaId suffise à sélectionner une chaîne dans MediaBrowserService, il devient lié à une session et n'est pas cohérent entre les fournisseurs. Dans certains cas, le client peut avoir besoin d'un pointeur absolu (comme une fréquence absolue) pour le maintenir entre les sessions et les appareils.

    À l'ère des diffusions radio numériques, une fréquence brute n'est pas suffisante pour se connecter à une station spécifique. Par conséquent, utilisez ProgramSelector pour régler la chaîne analogique ou numérique. ProgramSelector se compose de deux parties:

    • Identifiant principal Identifiant unique et stable d'une station de radio donnée qui ne change pas, mais qui peut ne pas suffire à la syntoniser. Par exemple, le code PI RDS, qui peut être traduit en indicatif d'appel aux États-Unis.
    • Identifiants secondaires Identifiants supplémentaires utiles pour régler la station (par exemple, la fréquence), y compris éventuellement des identifiants d'autres technologies radio. Par exemple, une station DAB peut avoir un service de diffusion analogique de secours.

    Pour permettre à ProgramSelector de s'intégrer à la solution basée sur MediaBrowser ou MediaSession, définissez un schéma d'URI pour le sérialiser. Le schéma est défini comme suit:

    broadcastradio://program/<primary ID type>/<primary ID>?
    <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>

    Dans cet exemple, la partie "Identifiants secondaires" (après le point d'interrogation (?)) est facultative et peut être supprimée pour fournir un identifiant stable à utiliser comme mediaId. Exemple :

    • broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=88500&AMFM_FREQUENCY=103300
    • broadcastradio://program/AMFM_FREQUENCY/102100
    • broadcastradio://program/DAB_SID_EXT/14895264?RDS_PI=1234

    La partie autorité (également appelée hôte) de program offre une certaine marge d'extension du schéma à l'avenir. Les chaînes de type d'identifiant sont spécifiées précisément comme leurs noms dans la définition HAL 2.x de IdentifierType, et le format de valeur est un nombre décimal ou hexadécimal (avec le préfixe 0x).

    Tous les identifiants spécifiques au fournisseur sont représentés par le préfixe VENDOR_. Par exemple, VENDOR_0 pour VENDOR_START et VENDOR_1 pour VENDOR_START + 1. Ces URI sont spécifiques au matériel radio sur lequel ils ont été générés et ne peuvent pas être transférés d'un appareil à un autre fabriqué par différents OEM.

    Ces URI doivent être attribués à chaque MediaItem sous les dossiers de radio de premier niveau. De plus, MediaSession doit être compatible avec playFromMediaId et playFromUri. Toutefois, l'URI est principalement destiné à l'extraction des métadonnées radio (telles que la fréquence FM) et au stockage persistant. Il n'est pas garanti que l'URI sera disponible pour tous les éléments multimédias (par exemple, lorsque le type d'ID principal n'est pas encore compatible avec le framework). En revanche, l'ID multimédia fonctionne toujours. Il est déconseillé aux clients d'utiliser des URI pour sélectionner des éléments à partir de la session MediaBrowser actuelle. Utilisez plutôt playFromMediaId. Toutefois, ce n'est pas facultatif pour l'application de diffusion, et les URI manquants sont réservés aux cas bien justifiés.

    La conception initiale utilisait un seul deux-points au lieu de la séquence :// après la partie du schéma. Toutefois, le premier n'est pas compatible avec android.net.Uri pour les références URI hiérarchiques absolues.

    Autres types de sources

    Vous pouvez gérer d'autres sources audio de la même manière. Par exemple, l'entrée auxiliaire et le lecteur de CD audio.

    Une seule application peut diffuser plusieurs types de sources. Dans ce cas, nous vous recommandons de créer un MediaBrowserService distinct pour chaque type de source. Même dans une configuration avec plusieurs sources/MediaBrowserServices, il est fortement recommandé d'avoir une seule MediaSession dans une seule application.

    CD audio

    Semblable au CD audio, l'application qui diffuse ces disques expose MediaBrowser avec une seule entrée consultable (ou plus, si le système dispose d'un changeur de CD), qui à son tour contient toutes les pistes d'un CD donné. Si le système ne connaît pas les pistes de chaque CD (par exemple, lorsque tous les disques sont insérés dans une cartouche en même temps et qu'il ne les lit pas tous), MediaItem pour l'ensemble du disque ne sera que PLAYABLE, et non BROWSABLE plus PLAYABLE. Si aucun disque n'est présent dans un emplacement donné, l'élément ne sera ni PLAYABLE, ni BROWSABLE (mais chaque emplacement doit toujours être présent dans l'arborescence).

     Structure arborescente d&#39;un CD audio
    Figure 3. Structure arborescente d'un CD audio.

    Ces entrées seraient marquées de la même manière que les dossiers de radiodiffusion. Elles contiendraient des champs supplémentaires définis dans l'API MediaDescription:

    • EXTRA_CD_TRACK: pour chaque MediaItem sur un CD audio, numéro de piste basé sur 1.
    • EXTRA_CD_DISK: numéro de disque à partir de 1.

    Pour un système compatible avec CD-Text et un disque compatible, le titre du disque est défini dans le MediaItem de niveau supérieur. De même, les MediaItems pour les titres comportent le titre du titre.

    Entrée auxiliaire

    L'application qui diffuse l'entrée auxiliaire expose un arbre MediaBrowser avec une seule entrée (ou plus, lorsqu'il existe plusieurs ports) représentant le port d'entrée AUX. La MediaSession correspondante prend son mediaId et passe à cette source après avoir reçu la requête playFromMediaId.

    Structure de l&#39;arborescence AUX
    Figure 4. Structure de l'arborescence AUX.

    Chaque entrée MediaItem AUX comporte un champ EXTRA_AUX_PORT_NAME supplémentaire défini sur le nom non localisé du port, sans la mention "AUX". Par exemple, "AUX 1" est défini sur "1", "AUX avant" sur "avant" et "AUX" sur une chaîne vide. Dans les paramètres régionaux autres que l'anglais, la balise de nom reste la même chaîne en anglais. Peu probable, car comme pour EXTRA_BCRADIO_BAND_NAME_EN, les valeurs sont définies par l'OEM et ne sont pas limitées à une liste prédéfinie.

    Si le matériel peut détecter les appareils connectés au port AUX, il doit marquer le MediaItem comme PLAYABLE, uniquement si l'entrée est connectée. Le matériel doit toujours être énuméré (mais pas PLAYABLE) si rien n'est connecté à ce port. Si le matériel ne dispose pas de cette fonctionnalité, le MediaItem doit toujours être défini sur PLAYABLE.

    Champs supplémentaires

    Définissez les champs suivants:

    • EXTRA_CD_TRACK = "android.media.extra.CD_TRACK"
    • EXTRA_CD_DISK = "android.media.extra.CD_DISK"
    • EXTRA_AUX_PORT_NAME = "android.media.extra.AUX_PORT_NAME"

    Le client doit vérifier les éléments MediaItems de niveau supérieur pour les éléments dont le champ supplémentaire EXTRA_CD_DISK ou EXTRA_AUX_PORT_NAME est défini.

    Exemples détaillés

    Les exemples suivants concernent la structure arborescente de MediaBrowser pour les types de sources qui font partie de cette conception.

    MediaBrowserService de diffusion radio (gère ACTION_PLAY_BROADCASTRADIO):

    • Stations (consultables)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
      • URI BBC One (jouable) : broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
      • URI ABC 88.1 (jouable) : broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
      • URI ABC 88.1 HD1 (jouable) : broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
      • URI ABC 88.1 HD2 (jouable) : broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
      • 90.5 FM (jouable) – FM sans RDSURI : broadcastradio://program/AMFM_FREQUENCY/90500
      • URI 620 AM (jouable) : broadcastradio://program/AMFM_FREQUENCY/620
      • URI BBC One (jouable) : broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
    • Favoris (consultables, lisibles)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
      • URI BBC One (jouable) : broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
      • URI BBC Two (non lisible) : broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
    • AM (consultable, lisible) : EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
      • URI 530 AM (jouable) : broadcastradio://program/AMFM_FREQUENCY/530
      • URI 540 AM (jouable) : broadcastradio://program/AMFM_FREQUENCY/540
      • URI 550 AM (jouable) : broadcastradio://program/AMFM_FREQUENCY/550
    • FM (consultable, lisible) : EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
      • URI 87,7 FM (jouable) : broadcastradio://program/AMFM_FREQUENCY/87700
      • URI 87,9 FM (jouable) : broadcastradio://program/AMFM_FREQUENCY/87900
      • URI 88.1 FM (jouable) : broadcastradio://program/AMFM_FREQUENCY/88100
    • DAB (jouable): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"

    MediaBrowserService pour CD audio (gère ACTION_PLAY_AUDIOCD):

    • Disque 1 (jouable) EXTRA_CD_DISK=1
    • Disque 2 (consultable, lisible) EXTRA_CD_DISK=2
      • Piste 1 (jouable) EXTRA_CD_TRACK=1
      • Piste 2 (jouable) EXTRA_CD_TRACK=2
    • Mon CD de musique (consultable, lisible) EXTRA_CD_DISK=3
      • All By Myself (jouable) EXTRA_CD_TRACK=1
      • Reise, Reise (jouable) EXTRA_CD_TRACK=2
    • Case 4 vide (non jouable) EXTRA_CD_DISK=4

    AUX MediaBrowserService (gère ACTION_PLAY_AUX):

    • Entrée auxiliaire avant (jouable) EXTRA_AUX_PORT_NAME="front"
    • AUX arrière (jouable) EXTRA_AUX_PORT_NAME="rear"