Implementierung einer Funksteuerung

Die Implementierung der Funksteuerung basiert auf MediaSession und MediaBrowse, mit denen Medien- und Sprachassistenten-Apps Folgendes ermöglichen: das Radio zu steuern. Weitere Informationen finden Sie unter Erstelle Medien-Apps für Autos auf developer.android.com.

In der Unterstützung des Autoradios wird eine Baumstruktur für die Mediensuche bereitgestellt. Bibliothek in packages/apps/Car/libs. Diese Bibliothek enthält auch Erweiterungen von ProgramSelector zum Konvertieren in und aus URI. Es wird empfohlen, Verwenden Sie diese Bibliothek, um den zugehörigen Suchbaum zu erstellen.

Medienquelle wechseln

Für einen nahtlosen Übergang zwischen Radio und anderen in Medien angezeigten Apps Die Car-media-common Library enthält Klassen, die in den Radiosender integriert werden sollten. MediaAppSelectorWidget kann in der XML-Datei für die Radio-App enthalten sein (Symbol und Drop-down-Menü, das in den Referenzmedien- und Radio-Apps verwendet wird):

<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" />

Dieses Widget startet AppSelectionFragment, das eine eine Liste der Medienquellen, zu denen gewechselt werden kann. Wenn eine andere als die angegebene Benutzeroberfläche gewünscht wird, können Sie ein benutzerdefiniertes Widget erstellen, um AppSelectionFragment zu starten, wenn das sollte angezeigt werden.

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

Die Referenz-Radio-App enthält eine Beispielimplementierung. in packages/apps/Car/Radio.

Detaillierte Steuerungsspezifikationen

MediaSession (über MediaSession.Callback) -Schnittstelle bietet Steuermechanismen für das aktuell wiedergegebene Radioprogramm:

  • onPlay, onStop. Stummschaltung der Radiowiedergabe aufheben.
  • onPause Zeitversetzte Pause (falls unterstützt)
  • onPlayFromMediaId Alle Inhalte aus einem übergeordneten Ordner werden abgespielt. Beispiel: „Spiel FM“ oder „Radio hören“.
  • onPlayFromUri Eine bestimmte Frequenz wird abgespielt. Beispiel: „Spiel 88,5 FM“.
  • onSkipToNext, onSkipToPrevious. Nächsten oder vorherigen Titel einstellen Sender.
  • onSetRating Zu Favoriten hinzufügen oder daraus entfernen

Der MediaBrowser zeigt eine einstellbare MediaItem für drei Arten von Verzeichnissen der obersten Ebene verwenden:

  • (Optional) Programme (Stationen). Dieser Modus wird in der Regel von Dual-Tuner-Radios, die alle verfügbaren abstimmbaren Radiosender am Standort des Nutzers anzeigen.
  • Favoriten. Radioprogramme, die der Favoritenliste hinzugefügt wurden, einige möglicherweise nicht verfügbar (außerhalb des Empfangsbereichs)
  • Bandkanäle Alle physisch möglichen Kanäle in der aktuellen Region (87,9, 88.1, 88.3, 88.5, 88.7, 88.9, 89.1 usw.). Jede Band hat ein separates Verzeichnis auf oberster Ebene.
MediaBrowserService-Baumstruktur
Abbildung 2. Baumstruktur „MediaBrowserService“

Jedes Element in diesen Ordnern (AM/FM/Programme) ist ein MediaItem mit einem URI, der verwendet werden kann. mit MediaSession zur Feinabstimmung. Jeder Ordner der obersten Ebene (AM/FM/Programme) ist ein MediaItem mit einer mediaId, die kann zusammen mit MediaSession verwendet werden, um die Wiedergabe auszulösen. Dies liegt im Ermessen des OEMs. Für „Spiel FM“, „Spiel AM“ und „Spiel Radio ab“ sind alle unspezifischen Radioabfragen, die mediaId zum Senden an die OEM-Radio-App. Die Radio-App legt fest, was sie auf dem und die mediaId an.

Mediensitzung

Da es kein Konzept zum Pausieren eines Übertragungsstreams gibt, können die Aktionen „Wiedergabe“, „Pause“ und „Stopp“ nicht immer auf Radio angewendet. Über das Radio wird durch die Aktion „Stopp“ der Stream stummgeschaltet während Google Play mit dem Aufheben der Stummschaltung verknüpft ist.

Einige Radiosender (oder Apps) bieten die Möglichkeit, die Pause eines Übertragungsstreams durch Inhalte im Cache zu speichern und sie später wiederzugeben. Verwenden Sie in solchen Fällen onPause.

Durch die Wiedergabe über die mediaId- und URI-Aktion soll ein Sender abgestimmt werden. die von der MediaBrowser-Oberfläche abgerufen werden. Die mediaId ist ein beliebiger String die von der Radio-App bereitgestellt wird, um eine eindeutige ID festzulegen, sodass eine bestimmte ID nur auf einen Artikel verweist. und stabiler Wert, d. h. ein bestimmter Artikel hat für die gesamte Sitzung dieselbe ID. um eine bestimmte Station zu identifizieren. Der URI hat ein klar definiertes Schema. Kurz gesagt: Ein URI-basierter von ProgramSelector. Dadurch wird zwar das uniquity-Attribut beibehalten, stabil sein, kann sich jedoch ändern, wenn die Station eine andere Frequenz wechselt.

onPlayFromSearch wird standardmäßig nicht verwendet. liegt in der Verantwortung des Kunden (Companion-App), um ein Suchergebnis aus der MediaBrowser-Baumstruktur auszuwählen. Umzug dass diese Verantwortung für die Radio-App die Komplexität erhöhen würde, und erfordert formelle Verträge Zeichenfolgenabfragen angezeigt werden sollten, was zu einer ungleichmäßigen Nutzererfahrung auf unterschiedlicher Hardware führen kann. Plattformen.

Hinweis:Die Radio-App enthält keine zusätzlichen Informationen, die nützlich wären, um nach einem Stationsnamen zu suchen, der dem Client nicht angezeigt wird über die MediaBrowser-Oberfläche.

Das Überspringen zur nächsten oder vorherigen Station hängt vom aktuellen Kontext ab:

  • Wenn eine App auf einen Sender aus der Favoritenliste eingestellt ist, kann zum nächsten Sender aus der Favoritenliste springen.
  • Wenn du einen Sender aus der Programmliste hörst, wird möglicherweise der nächste Sender eingestellt verfügbaren Sender, sortiert nach Kanalnummer.
  • Wenn du einen beliebigen Kanal anhörst, wird möglicherweise der nächste physische Kanal eingestellt. auch ohne Funksignal.

Die Radio-App übernimmt diese Aktionen.

Fehlerbehandlung

TransportControls Aktionen (Wiedergabe, Stopp und Weiter) gibt kein Feedback dazu, ob die Aktion oder nicht. Fehler können nur durch Festlegen der MediaSession Bundesstaat in STATE_ERROR mit einer Fehlermeldung.

Die Radio-App muss diese Aktionen ausführen und entweder ausführen oder einen Fehlerstatus festlegen. Wenn die Ausführung des Wiedergabebefehls nicht sofort erfolgt, sollte der Wiedergabestatus in STATE_CONNECTING (bei direkter Abstimmung) oder STATE_SKIPPING_TO_PREVIOUS oder NEXT während der Befehl ausgeführt wird.

Der Client sollte PlaybackState beobachten und bestätigen Sie, dass die Sitzung das aktuelle Programm in das Programm geändert hat, das angefordert oder in das Fehlerstatus. STATE_CONNECTING darf 30 Sekunden nicht überschreiten. Eine direkte Abstimmung auf einen bestimmten Die AM/FM-Frequenz sollte viel schneller funktionieren.

Favoriten hinzufügen und entfernen

MediaSession unterstützt Bewertungen, mit denen Favoriten gesteuert werden können. onSetRating mit dem Wert "Rating" aufgerufen. RATING_HEART fügt den aktuell eingestellten Sender zur Favoritenliste hinzu bzw. entfernt ihn daraus.

Im Gegensatz zu den alten Voreinstellungen geht dieses Modell von ungeordneten und unbegrenzten Favoriten aus. , wenn jeder gespeicherte Favorit einem numerischen Slot zugewiesen wurde (normalerweise 1 bis 6). Infolgedessen wären voreingestellte Systeme nicht mit onSetRating kompatibel .

Die Einschränkung der MediaSession API besteht darin, dass nur der aktuell eingestellte Sender hinzugefügt oder entfernt werden können. Elemente müssen beispielsweise zuerst ausgewählt werden, bevor sie entfernt werden können. Dies ist lediglich eine Einschränkung des MediaBrowser-Clients, z. B. Companion-App. Die Radio-App ist nicht ähnlich eingeschränkt. Dieser Teil ist optional Wenn eine App „Favoriten“ nicht unterstützt.

MediaBrowser

Um die Frequenzen oder Namen von physischen Kanälen (bei der Feinabstimmung) auszudrücken Kanäle, die für eine bestimmte Funktechnologie geeignet sind), sind gültig für einer bestimmten Region werden alle gültigen Kanäle (Frequenzen) für jedes Band aufgelistet. In den USA sind das 101 FM-Kanäle im Bereich von 87, 8 bis 108,0-MHz-Bereich (mit Abstand von 0,2 MHz) und 117-AM-Kanäle im Bereich von 530 bis 1.700 kHz bei einem Abstand von 10 kHz. Da HD-Radio den gleichen Kanalraum nutzt, nicht separat dargestellt.

Die Liste der derzeit verfügbaren Radioprogramme ist flach, da dies Anzeigeschemata wie die Gruppierung nach Direct Audio Broadcast (DAB) verwenden.

Einträge in der Favoritenliste können möglicherweise nicht eingestellt werden. Wenn z. B. eine bestimmte Programm liegt außerhalb des zulässigen Bereichs. Die Radio-App erkennt möglicherweise, ob der Eintrag vorab abgestimmt werden können. In diesem Fall wird der Eintrag möglicherweise nicht als abspielbar markiert.

Um Ordner der obersten Ebene zu identifizieren, wird derselbe Mechanismus angewendet, der von Bluetooth verwendet wird. Das heißt, ein Extras-Bundle von MediaDescription enthält, genau wie Bluetooth mit EXTRA_BT_FOLDER_TYPE, ein Tuner-spezifisches Feld. Im Fall des Rundfunks führt dies zu der Definition der folgenden neuen Felder in der öffentliche API:

  • EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE" Eins der folgenden Werte:
    • BCRADIO_FOLDER_TYPE_PROGRAMS = 1 Derzeit verfügbare Programme.
    • BCRADIO_FOLDER_TYPE_FAVORITES = 2 Favoriten.
    • BCRADIO_FOLDER_TYPE_BAND = 3 Alle physischen Kanäle einer bestimmten Band.

    Sie müssen keine radiospezifischen Metadatenfelder definieren, da alle Die relevanten Daten passen in das vorhandene MediaBrowser.MediaItem-Schema:

    • Programmname (RDS PS, DAB-Dienstname). MediaDescription.getTitle.
    • FM-Frequenz. -URI (siehe ProgramSelector) oder MediaDescription.getTitle (wenn sich ein Eintrag im Ordner BROADCASTRADIO_FOLDER_TYPE_BAND befindet).
    • Funkspezifische Kennungen (RDS PI, DAB SId). MediaDescription.getMediaUri wurde zu ProgramSelector geparst.

    Normalerweise ist es nicht nötig, UKW-Frequenzen für einen Eintrag im das aktuelle Programm oder die Favoritenliste (da der Kunde mit Medien arbeiten sollte) IDs). Sollte jedoch ein solcher Bedarf bestehen, etwa zu Anzeigezwecken, im URI vorhanden und kann zu ProgramSelector geparst werden. Es wird jedoch nicht empfohlen, den URI zur Auswahl von Elementen im aktuellen Sitzung. Weitere Informationen finden Sie unter ProgramSelector

    Um Leistungs- oder binderbezogene Probleme zu vermeiden, muss der MediaBrowser-Dienst die Paginierung unterstützen:

    Hinweis:Die Paginierung wird standardmäßig im onLoadChildren() ohne Optionen-Handhabung.

    Ähnliche Einträge aus allen Arten von Listen (Rohkanäle, gefundene Programme und Favoriten) können unterschiedliche mediaIds haben. Dies hängt von der Radio-App ab. Unterstützung in der Bibliothek verwendet werden. Die URIs (in der ProgramSelector-Form) unterscheiden sich zwischen Rohkanälen und Programmen, die in den meisten Fällen gefunden werden (mit Ausnahme von FM). ohne RDS), aber die gefundenen Programme und Favoriten sind größtenteils identisch (mit Ausnahme von z. B. bei der Aktualisierung der Verfügbarkeitsprognose).

    Die Verwendung unterschiedlicher mediaIds für Einträge aus verschiedenen Listentypen führt dazu, können verschiedene Maßnahmen an ihnen vorgenommen werden. Sie können entweder die Favoritenliste oder der Liste „Alle Programme“ unter onSkipToNext entsprechend dem Ordner „Kürzlich“ MediaItem ausgewählt (siehe MediaSession).

    Spezielle Abstimmungsaktionen

    Mit der Programmliste können Nutzer einen bestimmten Sender einstellen, aber nicht allgemeine Anfragen stellen, wie z. B. „Auf UKW hören“, was dazu führen kann, dass eine kürzliche einen Sender auf dem UKW-Band gehört haben.

    Um solche Aktionen zu unterstützen, haben einige Verzeichnisse der obersten Ebene FLAG_PLAYABLE Flag gesetzt (zusammen mit FLAG_BROWSABLE) für Ordner).

    Aktion Abstimmung auf Vorgehensweise
    Radio hören Alle Radiokanäle startService(ACTION_PLAY_BROADCASTRADIO)

    ODER

    playFromMediaId(MediaBrowser.getRoot())
    FM abspielen Alle UKW-Kanäle Auf mediaId des FM-Bands abspielen.

    Welches Programm ausgewählt werden soll, hängt von der App ab. Dies ist in der Regel der zuletzt eingestellte Kanal aus der angegebenen Liste. Weitere Informationen zu ACTION_PLAY_BROADCASTRADIO, siehe Allgemeine Absichten der Wiedergabe.

    Erkennung und Dienstverbindung

    PackageManager kann den MediaBrowserService, der Radiosender bereitstellt, direkt finden. Baum. Rufen Sie dazu resolveService auf. mit dem Intent ACTION_PLAY_BROADCASTRADIO (siehe General Play Intents) und MATCH_SYSTEM_ONLY. Alle Dienste, die Radiodienste bereitstellen, mehrere sein; zum Beispiel AM/FM und Satellit trennen), verwenden Sie queryIntentServices

    Der aufgelöste Dienst verarbeitet die android.media.browse.MediaBrowserService-Bindung die Absicht der Nutzer*innen. Dies wird von GTS überprüft.

    Um eine Verbindung zum ausgewählten MediaBrowserService herzustellen, erstellen MediaBrowser-Instanz für eine bestimmte Dienstkomponente und connect. Nach dem Herstellen der Verbindung kann ein Handle zu MediaSession abgerufen werden über . getSessionToken

    Die Radio-App kann Clientpakete einschränken, die in einem onGetRoot die Implementierung ihres Dienstes. Die App sollte System-Apps erlauben, eine Verbindung herzustellen ohne auf die weiße Liste gesetzt zu werden. Weitere Informationen zur Aufnahme in die Zulassungsliste finden Sie unter Akzeptiere das Assistant-App-Paket und die Google Assistant-Signatur.

    Ist die quellenspezifische App (z. B. eine Radio-App) auf einem Gerät ohne eine solche Unterstützung ACTION_PLAY_BROADCASTRADIO, aber sein MediaBrowser-Baum würde keine radio-spezifischen Tags enthalten. So kann ein Kunde überprüfen, ob eine bestimmte Quelle auf einem Gerät verfügbar ist, muss:

    1. Radiodienst entdecken (resolveService anrufen für ACTION_PLAY_BROADCASTRADIO).
    2. Erstellen Sie MediaBrowser und stellen Sie dann eine Verbindung her.
    3. Präsenz von MediaItem mit EXTRA_BCRADIO_FOLDER_TYPE ermitteln extra.

    Hinweis : In den meisten Fällen muss der Client alle verfügbaren MediaBrowser-Baumstrukturen, um alle verfügbaren Quellen für ein bestimmtes Gerät zu ermitteln.

    Bandnamen

    Die Bandliste wird durch eine Reihe von Verzeichnissen der obersten Ebene mit einem Ordnertyp dargestellt Tag auf BCRADIO_FOLDER_TYPE_BAND festgelegt. Die von MediaItem Titel sind lokalisierte Zeichenfolgen, die Bandnamen darstellen. In den meisten Fällen der englischen Übersetzung, aber der Kunde kann sich nicht auf diese Annahme verlassen.

    Um einen stabilen Mechanismus zum Suchen bestimmter Bänder bereitzustellen, Für Bandordner wurde ein zusätzliches Tag hinzugefügt: EXTRA_BCRADIO_BAND_NAME_EN. Dies ist einen nicht lokalisierten Namen des Bandes und kann nur einen der folgenden vordefinierten Werte annehmen:

    • AM
    • FM
    • DAB

    Wenn sich das Band nicht in dieser Liste befindet, sollte das Bandnamen-Tag nicht festgelegt werden. Wenn das Band jedoch in der Liste aufgeführt ist, muss ein Tag festgelegt sein. HD-Radio funktioniert nicht Zählen Sie separate Bänder auf, da es dasselbe zugrunde liegende Medium wie AM/FM verwendet.

    Allgemeine Kaufabsichten

    Jede App, die auf die Wiedergabe einer bestimmten Quelle (z. B. Radio oder CD) ausgerichtet ist, muss eine allgemeine Wiedergabe-Abfolge, um mit der Wiedergabe von Inhalten zu beginnen, möglicherweise inaktiv (z. B. nach dem Booten). Es hängt von der App ab, wie die Inhalte ausgewählt werden, Normalerweise handelt es sich dabei aber um das kürzlich angehörte Radioprogramm oder den kürzlich angehörten CD-Titel. Intent für jede Audioquelle definiert:

    • android.car.intent.action.PLAY_BROADCASTRADIO
    • android.car.intent.action.PLAY_AUDIOCD: CD-DA oder CD-Text
    • android.car.intent.action.PLAY_DATADISC: Optische Datendisk wie CD/DVD, aber nicht CD-DA (möglicherweise gemischte CD)
    • android.car.intent.action.PLAY_AUX: ohne anzugeben, welche AUX-Anschluss
    • android.car.intent.action.PLAY_BLUETOOTH
    • android.car.intent.action.PLAY_USB: ohne anzugeben, welche USB-Gerät
    • android.car.intent.action.PLAY_LOCAL: Lokaler Medienspeicher (integrierter Blitz)

    Intents wurden für allgemeine Wiedergabebefehle ausgewählt, zwei Probleme gleichzeitig haben: den allgemeinen Wiedergabebefehl und die Diensterkennung. Ein zusätzlicher Vorteil dieser Absicht wäre die Möglichkeit, solche ohne die MediaBrowser-Sitzung zu öffnen.

    Die Diensterkennung ist eigentlich das wichtigere Problem, das mit diesen Intents. Das Verfahren für die Diensterkennung ist auf diese Weise einfach und eindeutig (siehe Erkennung und Dienstverbindung.

    Um einige Clientimplementierungen zu vereinfachen, gibt es eine alternative Methode, der den entsprechenden Wiedergabebefehl ausgibt (der auch von der Radio-App implementiert werden muss): Ausgabe von playFromMediaId mit der RootId des Root-Knotens (verwendet als mediaId). Während die Root-Knoten nicht abspielbar ist, ist die "rootId" ein beliebiger String das als „mediaId“ genutzt werden kann. Es sind jedoch keine Clients erforderlich, um diese Nuance zu verstehen.

    Programmauswahl

    mediaId reicht zwar aus, um einen Kanal aus der MediaBrowserService, wird sie an eine Sitzung gebunden und nicht konsistent. zwischen den Anbietern. In einigen Fällen benötigt der Client möglicherweise einen absoluten Zeiger (z. B. absolute Häufigkeit), um sie zwischen Sitzungen und Geräten aufrechtzuerhalten.

    Im Zeitalter des digitalen Radiosenders reicht eine reine Frequenz nicht aus, um einen bestimmten Sender einzustellen. Verwenden Sie daher ProgramSelector, um mit einem analogen oder digitalen Kanal verbunden werden. ProgramSelector besteht aus zwei Teilen:

    • Primäre Kennung: Eine eindeutige und stabile ID für einen bestimmten Radiosender der sich nicht ändert, aber nicht ausreicht, um diesen Sender einzustellen. Beispiel: RDS-PI-Code, der in den USA in das Rufzeichen übersetzt werden kann.
    • Sekundäre Kennungen: Zusätzliche Kennungen für die Abstimmung zu dieser Station (z. B. Frequenz), möglicherweise auch Kennungen von anderen Funktechnologien. So kann beispielsweise ein DAB-Sender über ein Fallback für analogen Rundfunk verfügen.

    Damit ProgramSelector in das MediaBrowser- oder MediaSession-basierte Lösung können Sie ein URI-Schema definieren, um sie zu serialisieren. Das Schema ist wie folgt definiert:

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

    In diesem Beispiel lautet der Abschnitt mit den sekundären Kennungen (nach dem Fragezeichen (?)) optional und kann entfernt werden, um eine stabile ID für die Verwendung als mediaId bereitzustellen. Beispiel:

    • 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

    Der Autorisierungsteil (auch bekannt als Host) von program bietet etwas Spielraum für in Zukunft zu testen. Die Zeichenfolgen des ID-Typs sind genau angegeben. als ihre Namen in der HAL 2.x-Definition von IdentifierType und im Wert ist eine Dezimal- oder Hexadezimalzahl mit dem Präfix 0x.

    Alle anbieterspezifischen Kennzeichnungen werden durch das VENDOR_ dargestellt . Beispiel: VENDOR_0 für VENDOR_START und VENDOR_1 für VENDOR_START plus 1. Solche URIs sind spezifisch für Die Funkhardware, auf der sie generiert wurden und nicht zwischen Geräten übertragen werden können von verschiedenen OEMs.

    Diese URIs müssen jedem MediaItem unter dem Radio der obersten Ebene zugewiesen werden. Ordner. Außerdem muss MediaSession sowohl playFromMediaId unterstützen, und playFromUri. Der URI ist jedoch in erster Linie für Funkschnittstellen vorgesehen. Metadatenextraktion (z. B. FM-Frequenz) und dauerhafter Speicher. Es gibt keine wird garantiert, dass der URI für alle Medienelemente verfügbar ist, z. B. wenn das primäre ID-Typ wird vom Framework noch nicht unterstützt). Die Media-ID hingegen funktioniert immer. Es wird nicht empfohlen, für Clients den URI zur Auswahl von Elementen aus der aktuelle MediaBrowser-Sitzung. Verwende stattdessen playFromMediaId. Allerdings ist es nicht optional für die bereitstellende Anwendung und fehlende URIs sind nur für gut begründete Fälle vorgesehen.

    Im ursprünglichen Design wurde anstelle der ://-Sequenz ein einzelner Doppelpunkt verwendet nach dem Schemateil ein. Erstere wird jedoch nicht von android.net.Uri für absolute hierarchische URI-Referenzen.

    Andere Quelltypen

    Andere Audioquellen können auf ähnliche Weise gehandhabt werden. Beispiel: Hilfseingabe und Audio-CD-Player.

    Eine einzelne App kann mehrere Arten von Quellen bereitstellen. In solchen Fällen empfohlen, einen separaten MediaBrowserService für jede Art von Quelle. Auch bei einer Einrichtung mit mehreren bereitgestellten Quellen/MediaBrowserServices wird dringend empfohlen, jeweils eine MediaSession in einem

    Audio-CD

    Ähnlich wie bei Audio-CDs insofern, als die App, die solche Datenträger ausliefert, MediaBrowser mit einem einzigen durchsuchbaren Eintrag (oder mehr, wenn das System über eine CD-Wechsler), die wiederum alle Titel einer bestimmten CD enthalten. Wenn das System nicht über die Titel auf jeder CD verfügt (z. B. wenn alle Datenträger gleichzeitig in eine Patrone eingesetzt werden und nicht alle gelesen werden), dann MediaItem für das gesamte Laufwerk wäre nur PLAYABLE, nicht BROWSABLE plus PLAYABLE. Befindet sich kein Datenträger in einem für eine Anzeigenfläche wäre das Element weder PLAYABLE noch BROWSABLE. (aber jeder Slot muss immer in der Baumstruktur vorhanden sein).

     Baumstruktur der Audio-CD
    Abbildung 3: Baumstruktur der Audio-CD

    Diese Einträge würden ähnlich markiert werden wie das Senden von Radioordnern. sind: Sie enthalten zusätzliche zusätzliche Felder, die in der MediaDescription API definiert sind:

    • EXTRA_CD_TRACK: Pro MediaItem auf Audio-CD 1-basierte Titelnummer.
    • EXTRA_CD_DISK: 1-basierte Laufwerksnummer.

    Bei einem System mit aktiviertem CD-Text und einem kompatiblen Laufwerk würde das MediaItem der obersten Ebene den Titel des Datenträgers. Entsprechend hätten die MediaItems für Tracks eine Titel des Titels.

    AUX-Eingang

    Die Anwendung, die die Hilfseingaben bereitstellt, stellt eine MediaBrowser-Baumstruktur mit einem einzelnen Eintrag (oder mehr, wenn mehrere Ports vorhanden sind), die den AUX-Eingang darstellen. Die entsprechende MediaSession übernimmt ihre mediaId und wechselt nach Erhalt der playFromMediaId-Anfrage zu dieser Quelle.

    AUX-Baumstruktur
    Abbildung 4: AUX-Baumstruktur

    Jeder AUX MediaItem-Eintrag hätte ein zusätzliches Feld EXTRA_AUX_PORT_NAME ist auf den nicht lokalisierten Namen des Ports festgelegt ohne das „AUX“ Wortgruppe. Beispiel: „AUX 1“ auf „1“, „AUX“ oder vorne“ nach vorne und „AUX“ in einen leeren String. In anderen Sprachen als Englisch würde der englische String beibehalten. Unwahrscheinlich EXTRA_BCRADIO_BAND_NAME_EN sind die Werte OEM-definiert und nicht auf eine vordefinierte Liste beschränkt.

    Wenn die Hardware am AUX-Port angeschlossene Geräte erkennen kann, sollte auf der Hardware das MediaItem als PLAYABLE, nur wenn die Eingabe verbunden ist. Die Hardware sollte werden trotzdem aufgelistet (aber nicht PLAYABLE), wenn nichts damit verbunden ist. Port. Wenn die Hardware nicht über eine solche Funktion verfügt, muss MediaItem immer auf PLAYABLE

    Zusätzliche Felder

    Definieren Sie die folgenden Felder:

    • 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"

    Der Kunde muss die MediaItems der obersten Ebene auf Elemente überprüfen, die die EXTRA_CD_DISK oder EXTRA_AUX_PORT_NAME zusätzliches Feld festgelegt.

    Detaillierte Beispiele

    In den folgenden Beispielen wird die MediaBrowser-Baumstruktur für Quelltypen behandelt, die Teil dieses Designs.

    Broadcast-Radio-MediaBrowserService (Handles ACTION_PLAY_BROADCASTRADIO):

    • Sender (durchsuchbar)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
      • URI von BBC One (abspielbar): broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
      • URI ABC 88.1 (abspielbar): broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
      • URI ABC 88.1 HD1 (abspielbar): broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
      • URI ABC 88.1 HD2 (abspielbar): broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
      • 90,5 FM (abspielbar) – FM ohne RDSURI: broadcastradio://program/AMFM_FREQUENCY/90500
      • URI für 620 AM (abspielbar): broadcastradio://program/AMFM_FREQUENCY/620
      • BBC One-URI (abspielbar): broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
    • Favoriten (blätterbar, spielbar)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
      • BBC One-URI (abspielbar): broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
      • BBC Two (nicht abspielbar)URI: broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
    • AM (durchsuchbar, abspielbar): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
      • URI für 530 AM (abspielbar): broadcastradio://program/AMFM_FREQUENCY/530
      • URI für 540 AM (abspielbar): broadcastradio://program/AMFM_FREQUENCY/540
      • URI für 550 AM (abspielbar): broadcastradio://program/AMFM_FREQUENCY/550
    • FM (durchsuchbar, abspielbar): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
      • 87.7 FM (abspielbar) URI: broadcastradio://program/AMFM_FREQUENCY/87700
      • 87.9 FM (abspielbar) URI: broadcastradio://program/AMFM_FREQUENCY/87900
      • 88.1 FM (abspielbar) URI: broadcastradio://program/AMFM_FREQUENCY/88100
    • DAB (abspielbar): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"

    Audio CD MediaBrowserService (Handles ACTION_PLAY_AUDIOCD):

    • Disc 1 (abspielbar) EXTRA_CD_DISK=1
    • Disc 2 (blätterbar, abspielbar) EXTRA_CD_DISK=2
      • Titel 1 (abspielbar) EXTRA_CD_TRACK=1
      • Titel 2 (abspielbar) EXTRA_CD_TRACK=2
    • Meine Musik-CD (durchsuchbar, abspielbar) EXTRA_CD_DISK=3
      • All für mich (spielbar) EXTRA_CD_TRACK=1
      • Reise, Reise (playable) EXTRA_CD_TRACK=2
    • Leerer Slot 4 (nicht spielbar) EXTRA_CD_DISK=4

    AUX MediaBrowserService (Handles ACTION_PLAY_AUX):

    • AUX-Frontkamera (abspielbar) EXTRA_AUX_PORT_NAME="front"
    • AUX auf der Rückseite (abspielbar) EXTRA_AUX_PORT_NAME="rear"