Die Implementierung der Radiosteuerung basiert auf MediaSession
und MediaBrowse
, mit denen Medien- und Sprachassistenten-Apps das Radio steuern können. Weitere Informationen finden Sie unter developer.android.com im Hilfeartikel Medien-Apps für Autos entwickeln.
Eine Implementierung des Medien-Suchbaums ist in der Bibliothek „car-broadcastradio-support“ in packages/apps/Car/libs
verfügbar. Diese Bibliothek enthält auch Erweiterungen von ProgramSelector zum Konvertieren von und nach URIs. Für Radioimplementierungen wird empfohlen, diese Bibliothek zum Erstellen des zugehörigen Navigationsbaums zu verwenden.
Medienquellen-Umschalter
Für einen nahtlosen Übergang zwischen dem Radio und anderen in den Medien angezeigten Apps enthält die car-media-common-Bibliothek Klassen, die in die Radio-App eingebunden werden sollten. MediaAppSelectorWidget
kann in die XML-Datei der Radio-App eingefügt werden (das Symbol und das 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 öffnet die AppSelectionFragment
, in der eine Liste der Medienquellen angezeigt wird, zu denen gewechselt werden kann. Wenn Sie eine andere Benutzeroberfläche als die bereitgestellte verwenden möchten, können Sie ein benutzerdefiniertes Widget erstellen, um AppSelectionFragment
zu starten, wenn der Schalter angezeigt werden soll.
AppSelectionFragment newFragment = AppSelectionFragment.create(widget, packageName, fullScreen); newFragment.show(mActivity.getSupportFragmentManager(), null);
Eine Beispielimplementierung finden Sie in der Referenzimplementierung der Radio-App unter packages/apps/Car/Radio
.
Detaillierte Steuerspezifikationen
Die Benutzeroberfläche MediaSession
(bis MediaSession.Callback
) bietet Steuermechanismen für das gerade abgespielte Radioprogramm:
onPlay
,onStop
. Stummschaltung der Radiowiedergabe aktivieren oder deaktivierenonPause
Pause bei zeitversetzter Wiedergabe (falls unterstützt)onPlayFromMediaId
Inhalte aus einem übergeordneten Ordner abspielen. Beispiel: „UKW-Radio abspielen“ oder „Radio abspielen“.onPlayFromUri
. Eine bestimmte Frequenz wiedergeben. Beispiel: „Spiel 88,5 FM ab.“onSkipToNext
,onSkipToPrevious
. Zum nächsten oder vorherigen Sender wechseln.onSetRating
Zu Favoriten hinzufügen oder daraus entfernen.
Der MediaBrowser stellt ein anpassbares MediaItem über drei Arten von Verzeichnissen der obersten Ebene bereit:
- (Optional) Programme (Sender) Dieser Modus wird in der Regel von Dual-Tuner-Radios verwendet, um alle verfügbaren Radiosender am Standort des Nutzers anzugeben.
- Favoriten Einige der zur Favoritenliste hinzugefügten Radioprogramme sind möglicherweise nicht verfügbar, da sie sich außerhalb des Empfangsbereichs befinden.
- 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.). Jedes Band hat ein eigenes Verzeichnis auf oberster Ebene.
Jedes Element in jedem dieser Ordner (AM/FM/Programme) ist ein MediaItem mit einem URI, der mit MediaSession zum Umschalten verwendet werden kann. Jeder Ordner der obersten Ebene (AM/FM/Programme) ist ein MediaItem mit einer mediaId, die mit MediaSession verwendet werden kann, um die Wiedergabe auszulösen. Diese Entscheidung liegt im Ermessen des OEMs. „FM abspielen“, „AM abspielen“ und „Radio abspielen“ sind beispielsweise nicht spezifische Radioabfragen, bei denen eine mediaId an die Radio-App des OEM gesendet wird. Die Radio-App entscheidet, was anhand der generischen Anfrage und der mediaId abgespielt werden soll.
MediaSession
Da es kein Konzept zum Pausieren eines Übertragungsstreams gibt, gelten die Aktionen „Wiedergabe“, „Pausieren“ und „Beenden“ nicht immer für Radio. Bei Radio ist die Aktion „Stopp“ mit dem Stummschalten des Streams verknüpft, während „Wiedergabe“ mit dem Aufheben der Stummschaltung verknüpft ist.
Einige Radiotuner (oder Apps) bieten die Möglichkeit, eine Pause des Übertragungsstreams zu simulieren, indem Inhalte im Cache gespeichert und später wiedergegeben werden. Verwenden Sie in diesen Fällen onPause
.
Mit den Aktionen „Wiedergabe über mediaId“ und „URI“ soll ein Sender ausgewählt werden, der über die MediaBrowser-Benutzeroberfläche abgerufen wird. Die mediaId ist ein beliebiger String, der von der Radio-App bereitgestellt wird, um einen eindeutigen (d. h. eine bestimmte ID verweist nur auf ein Element) und stabilen (d. h. ein bestimmtes Element hat während der gesamten Sitzung dieselbe ID) Wert anzugeben, mit dem ein bestimmter Sender identifiziert werden kann. Der URI hat ein klar definiertes Schema. Kurz gesagt: eine URI-Version von „ProgramSelector“. Das Attribut „Einzigartigkeit“ bleibt dabei erhalten, muss aber nicht stabil sein. Es kann sich ändern, wenn der Sender zu einer anderen Frequenz wechselt.
onPlayFromSearch
wird standardmäßig nicht verwendet. Es liegt in der Verantwortung des Clients (Companion-App), ein Suchergebnis aus dem MediaBrowser-Baum auszuwählen. Wenn diese Verantwortung auf die Radio-App übertragen würde, würde dies die Komplexität erhöhen, formelle Verträge darüber erfordern, wie Stringabfragen angezeigt werden sollen, und zu einer uneinheitlichen Nutzererfahrung auf verschiedenen Hardwareplattformen führen.
Hinweis:Die Radio-App enthält keine zusätzlichen Informationen, die für die Suche nach einem Sendernamen nützlich wären, der dem Client nicht über die MediaBrowser-Benutzeroberfläche zur Verfügung gestellt wird.
Ob Sie zur nächsten oder vorherigen Haltestelle springen, hängt vom aktuellen Kontext ab:
- Wenn eine App auf einen Sender aus der Favoritenliste eingestellt ist, kann die App zum nächsten Sender in der Favoritenliste wechseln.
- Wenn Sie einen Sender aus der Programmliste abspielen, wird möglicherweise der nächste verfügbare Sender nach Kanalnummer ausgewählt.
- Wenn Sie sich einen beliebigen Kanal anhören, kann es passieren, dass der nächste physische Kanal eingestellt wird, auch wenn kein Übertragungssignal vorhanden ist.
Diese Aktionen werden von der Radio-App ausgeführt.
Fehlerbehandlung
TransportControls
Aktionen wie „Wiedergabe“, „Stopp“ und „Weiter“ geben keine Rückmeldung dazu, ob die Aktion erfolgreich war oder nicht. Der einzige Weg, einen Fehler anzugeben, besteht darin, den Status von MediaSession auf STATE_ERROR
mit einer Fehlermeldung festzulegen.
Die Radio-App muss diese Aktionen verarbeiten und entweder ausführen oder einen Fehlerstatus festlegen.
Wenn die Ausführung des Befehls „Wiedergabe“ nicht sofort erfolgt, sollte der Wiedergabestatus während der Ausführung des Befehls in
STATE_CONNECTING
(bei direkter Senderauswahl) oder
STATE_SKIPPING_TO_PREVIOUS
oder
NEXT
geändert werden.
Der Kunde sollte sich
PlaybackState
ansehen und prüfen, ob das aktuelle Programm in der Sitzung in das angeforderte Programm geändert wurde oder in den Fehlerstatus versetzt wurde. STATE_CONNECTING
darf 30 Sekunden nicht überschreiten. Die direkte Abstimmung auf eine bestimmte AM/FM-Frequenz sollte jedoch viel schneller erfolgen.
Favoriten hinzufügen und entfernen
MediaSession unterstützt Altersfreigaben, mit denen sich Favoriten steuern lassen. onSetRating
wird mit einer Bewertung vom Typ RATING_HEART
aufgerufen und fügt den aktuell eingestellten Sender der Favoritenliste hinzu oder entfernt ihn daraus.
Im Gegensatz zu älteren Presets geht dieses Modell von einer unsortierten und unbegrenzten Favoritenliste aus, bei der jedem gespeicherten Favoriten ein numerischer Slot zugewiesen wurde (in der Regel 1 bis 6).
Daher sind voreingestellte Systeme mit der onSetRating
-Funktion nicht kompatibel.
Die Einschränkung der MediaSession API besteht darin, dass nur der Sender hinzugefügt oder entfernt werden kann, der gerade eingestellt ist. So müssen Elemente beispielsweise zuerst ausgewählt werden, bevor sie entfernt werden können. Dies ist nur eine Einschränkung des MediaBrowser-Clients, z. B. einer Companion-App. Die Radio-App ist nicht ähnlich eingeschränkt. Dieser Abschnitt ist optional, wenn eine App keine Favoriten unterstützt.
MediaBrowser
Um anzugeben, welche Frequenzen oder physischen Kanalnamen für eine bestimmte Region gültig sind, werden für jedes Band alle gültigen Kanäle (Frequenzen) aufgeführt. In den USA entspricht dies 101 FM-Kanälen im Bereich von 87,8 bis 108,0 MHz (mit einem Abstand von 0,2 MHz) und 117 AM-Kanälen im Bereich von 530 bis 1700 kHz (mit einem Abstand von 10 kHz). Da HD-Radio denselben Kanalbereich verwendet, wird es nicht separat angezeigt.
Die Liste der derzeit verfügbaren Radioprogramme ist flach, d. h., es sind keine Darstellungsschemata wie die Gruppierung nach DAB-Ensemble (Direct Audio Broadcast) möglich.
Einträge in der Favoritenliste können möglicherweise nicht angepasst werden. Beispielsweise, wenn ein bestimmtes Programm nicht in den zulässigen Bereich fällt. Die Radio-App erkennt möglicherweise nicht, ob der Eintrag vorher eingestellt werden kann. In diesem Fall wird der Eintrag möglicherweise nicht als abspielbar markiert.
Zur Identifizierung von Ordnern der obersten Ebene wird derselbe Mechanismus verwendet, der auch von Bluetooth verwendet wird.
Das bedeutet, dass ein Extras-Bundle des
MediaDescription
-Objekts ein tunerspezifisches Feld enthält, genau wie Bluetooth bei
EXTRA_BT_FOLDER_TYPE
.
Im Fall von Rundfunkradio müssen in der öffentlichen API die folgenden neuen Felder definiert werden:
EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE"
: Einer 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 für ein bestimmtes Band.
Es müssen keine radiospezifischen benutzerdefinierten Metadatenfelder definiert werden, da alle relevanten Daten in das vorhandene
MediaBrowser.MediaItem
-Schema passen:- Programmname (RDS PS, DAB-Dienstname)
MediaDescription.getTitle
. - FM-Frequenz. URI (siehe ProgramSelector) oder
MediaDescription.getTitle
(wenn sich ein Eintrag im OrdnerBROADCASTRADIO_FOLDER_TYPE_BAND
befindet). - Radiospezifische Kennungen (RDS PI, DAB SId)
MediaDescription.getMediaUri
in ProgramSelector geparst.
Normalerweise muss die FM-Frequenz für einen Eintrag im aktuellen Programm oder in der Favoritenliste nicht abgerufen werden, da der Client mit Medien-IDs arbeiten sollte. Sollte dies jedoch erforderlich sein (z. B. zu Anzeigezwecken), ist sie im URI enthalten und kann in
ProgramSelector
geparst werden. Wir empfehlen jedoch nicht, den URI zum Auswählen von Elementen in der aktuellen Sitzung zu verwenden. Weitere Informationen finden Sie unterProgramSelector
.Zur Vermeidung von Leistungs- oder Binder-bezogenen Problemen muss der MediaBrowser-Dienst die Paginierung unterstützen:
EXTRA_PAGE
EXTRA_PAGE_SIZE
- Zusätzliche Parameter für
subscribe()
Hinweis:Die Paginierung ist in der
onLoadChildren()
-Variante standardmäßig ohne Optionen implementiert.Zugehörige Einträge aus allen Arten von Listen (Raw-Kanäle, gefundene Programme und Favoriten) können unterschiedliche mediaIds haben. Das hängt von der Radio-App ab. In der Support-Mediathek sind sie unterschiedlich. Die URIs (in Form von ProgramSelector) unterscheiden sich in den meisten Fällen zwischen Rohkanälen und gefundenen Programmen (außer bei FM ohne RDS), sind aber in den meisten Fällen identisch zwischen gefundenen Programmen und Favoriten (außer z. B. wenn AF aktualisiert wurde).
Durch unterschiedliche mediaIds für Einträge aus verschiedenen Listentypen können unterschiedliche Aktionen darauf ausgeführt werden. Je nachdem, in welchem Ordner die zuletzt ausgewählte
MediaItem
gespeichert ist, können Sie entweder die Liste „Favoriten“ oder die Liste „Alle Programme“ aufrufen (siehe MediaSession).onSkipToNext
Aktionen für spezielle Melodien
Über die Programmliste können Nutzer einen bestimmten Sender einstellen, aber keine allgemeinen Anfragen wie „FM-Sender suchen“ stellen, was dazu führen könnte, dass ein vor Kurzem gehörter Sender im FM-Band eingestellt wird.
Um solche Aktionen zu unterstützen, ist für einige Verzeichnisse der obersten Ebene das Flag
FLAG_PLAYABLE
festgelegt (zusammen mitFLAG_BROWSABLE
für Ordner).Aktion Toneinstellungen So stellen Sie eine Anfrage Radio hören Beliebiger Radiokanal startService(ACTION_PLAY_BROADCASTRADIO)
ODER
playFromMediaId(MediaBrowser.getRoot())
Play FM Beliebiger FM-Kanal Wiedergabe über die mediaId
des FM-BandsWelches Programm ausgewählt wird, liegt in der Verantwortung der App. In der Regel ist das der zuletzt eingestellte Kanal aus der Liste. Weitere Informationen zu
ACTION_PLAY_BROADCASTRADIO
finden Sie unter Allgemeine Wiedergabeabsichten.Erkennung und Dienstverbindung
PackageManager
kann den MediaBrowserService, der das Radio-Broadcast-Tree bereitstellt, direkt finden. Rufe dazuresolveService
mit dem IntentACTION_PLAY_BROADCASTRADIO
(siehe Allgemeine Wiedergabeabsichten) und dem FlagMATCH_SYSTEM_ONLY
auf. Wenn Sie alle Dienste finden möchten, die Radio anbieten (es kann mehr als einen geben, z. B. separate AM/FM- und Satellitendienste), verwenden SiequeryIntentServices
.Der aufgelöste Dienst verarbeitet auch die
android.media.browse.MediaBrowserService
-Bindung. Dies wird mit GTS überprüft.Um eine Verbindung zum ausgewählten MediaBrowserService herzustellen, erstelle eine
MediaBrowser
-Instanz für eine bestimmte Dienstkomponente undconnect
. Nach der Herstellung der Verbindung kann übergetSessionToken
ein Handle für die MediaSession abgerufen werden.Die Radio-App kann Clientpakete einschränken, die eine Verbindung zu einer
onGetRoot
-Implementierung des Dienstes herstellen dürfen. Die App sollte System-Apps die Verbindung ohne Zulassungsliste erlauben. Weitere Informationen zur Zulassungsliste finden Sie unter Assistant-App-Paket und ‑Signatur akzeptieren.Wenn die quellenspezifische App (z. B. eine Radio-App) auf einem Gerät ohne solche Quellunterstützung installiert ist, wird sie weiterhin als
ACTION_PLAY_BROADCASTRADIO
-Intent-Handler angezeigt, ihr MediaBrowser-Baum enthält jedoch keine radiospezifischen Tags. Wenn ein Client prüfen möchte, ob eine bestimmte Quelle auf einem Gerät verfügbar ist, muss er Folgendes tun:- Radiodienst suchen (
resolveService
fürACTION_PLAY_BROADCASTRADIO
anrufen) - Erstellen Sie
MediaBrowser
und stellen Sie dann eine Verbindung dazu her. - Vorhandensein von
MediaItem
mitEXTRA_BCRADIO_FOLDER_TYPE
extra ermitteln
Hinweis : In den meisten Fällen muss der Client alle verfügbaren MediaBrowser-Bäume scannen, um alle verfügbaren Quellen für ein bestimmtes Gerät zu erkennen.
Bandnamen
Die Bandliste wird durch eine Reihe von Verzeichnissen der obersten Ebene mit dem Tag „Ordnertyp“
BCRADIO_FOLDER_TYPE_BAND
dargestellt. Die Titel derMediaItem
sind lokalisierte Strings, die Bandnamen darstellen. In den meisten Fällen entspricht sie der englischen Übersetzung, aber der Kunde kann sich nicht darauf verlassen.Um einen stabilen Mechanismus zum Nachschlagen bestimmter Bänder bereitzustellen, wird für Bandordner ein zusätzliches Tag hinzugefügt:
EXTRA_BCRADIO_BAND_NAME_EN
. Dies ist ein nicht lokalisierter Name der Band und kann nur einen der folgenden vordefinierten Werte haben:AM
FM
DAB
Wenn die Band nicht in dieser Liste enthalten ist, sollte das Bandnamen-Tag nicht festgelegt werden. Wenn sich die Band jedoch in der Liste befindet, muss ein Tag festgelegt sein. Bei HD-Radio werden keine separaten Bänder aufgezählt, da dasselbe zugrunde liegende Medium wie bei AM/FM verwendet wird.
Allgemeine Wiedergabeabsicht
Jede App, die zum Abspielen einer bestimmten Quelle (z. B. Radio oder CD) dient, muss einen allgemeinen Wiedergabe-Intent verarbeiten, um die Wiedergabe von Inhalten möglicherweise aus dem inaktiven Zustand zu starten (z. B. nach dem Starten). Die App entscheidet, welche Inhalte abgespielt werden. In der Regel ist das das zuletzt abgespielte Radioprogramm oder der zuletzt abgespielte CD-Titel. Für jede Audioquelle ist eine separate Absicht definiert:
android.car.intent.action.PLAY_BROADCASTRADIO
android.car.intent.action.PLAY_AUDIOCD
: CD-DA oder CD-Textandroid.car.intent.action.PLAY_DATADISC
: Optische Datenscheibe wie CD/DVD, aber keine CD-DA (kann eine CD im gemischten Modus sein)android.car.intent.action.PLAY_AUX
: Ohne Angabe des AUX-Anschlussesandroid.car.intent.action.PLAY_BLUETOOTH
android.car.intent.action.PLAY_USB
: Ohne Angabe des USB-Gerätsandroid.car.intent.action.PLAY_LOCAL
: Lokaler Medienspeicher (integrierter Flash)
Für den allgemeinen Wiedergabebefehl wurden Intents ausgewählt, da sie zwei Probleme gleichzeitig lösen: den allgemeinen Wiedergabebefehl selbst und die Diensterkennung. Ein weiterer Vorteil dieser Intent-Art wäre die Möglichkeit, eine solche einfache Aktion auszuführen, ohne eine MediaBrowser-Sitzung zu öffnen.
Die Diensterkennung ist eigentlich das wichtigere Problem, das mit diesen Intents gelöst wird. So ist das Verfahren zur Diensterkennung einfach und eindeutig (siehe Diensterkennung und Dienstverbindung).
Um einige Clientimplementierungen zu vereinfachen, gibt es eine alternative Möglichkeit, einen solchen Wiedergabebefehl auszugeben (der auch von der Radio-App implementiert werden muss):
playFromMediaId
mit der Root-ID des Stammknotens (wird als „mediaId“ verwendet) ausgeben. Der Stammknoten ist zwar nicht zur Wiedergabe vorgesehen, seine „rootId“ ist jedoch ein beliebiger String, der als „mediaId“ verwendet werden kann. Kunden müssen diese Nuance jedoch nicht verstehen.ProgramSelector
mediaId
reicht zwar aus, um einen Kanal aus derMediaBrowserService
auszuwählen, wird aber an eine Sitzung gebunden und ist nicht zwischen den Anbietern konsistent. In einigen Fällen benötigt der Client einen absoluten Verweis (z. B. eine absolute Häufigkeit), um ihn zwischen Sitzungen und Geräten beizubehalten.Im Zeitalter digitaler Radioübertragungen reicht eine reine Frequenz nicht aus, um einen bestimmten Sender einzuwählen. Verwenden Sie daher
ProgramSelector
, um einen analogen oder digitalen Kanal zu suchen.ProgramSelector
besteht aus zwei Teilen:- Primäre Kennung Eine eindeutige und unveränderliche Kennung für einen bestimmten Radiosender, die sich nicht ändert, aber möglicherweise nicht ausreicht, um diesen Sender einzuschalten. Beispielsweise der RDS-PI-Code, der in den USA in das Rufzeichen übersetzt werden kann.
- Sekundäre Kennungen Zusätzliche Kennungen, die für die Einstellung auf diesen Sender nützlich sind (z. B. Frequenz), einschließlich Kennungen aus anderen Radiotechnologien. Ein DAB-Sender kann beispielsweise einen analogen Übertragungs-Fallback haben.
Damit
ProgramSelector
in dieMediaBrowser
- oderMediaSession
-basierte Lösung passt, müssen Sie ein URI-Schema zum Serialisieren definieren. Das Schema ist so definiert:broadcastradio://program/<primary ID type>/<primary ID>? <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>
In diesem Beispiel ist der Abschnitt „Secondary Identifiers“ (Sekundäre Kennungen) nach dem Fragezeichen (
?
) optional und kann entfernt werden, um eine stabile Kennung für die Verwendung alsmediaId
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 als Host bezeichnet) von
program
bietet Spielraum für eine zukünftige Erweiterung des Schemas. Die Strings für den Kennungstyp werden in der HAL 2.x-Definition vonIdentifierType
genau als Namen angegeben. Das Wertformat ist eine Dezimal- oder Hexadezimalzahl (mit dem Präfix0x
).Alle anbieterspezifischen Kennungen haben das Präfix
VENDOR_
. Beispiel:VENDOR_0
fürVENDOR_START
undVENDOR_1
fürVENDOR_START
+ 1. Solche URIs sind spezifisch für die Funkhardware, auf der sie generiert wurden, und können nicht zwischen Geräten verschiedener OEMs übertragen werden.Diese URIs müssen jedem MediaItem in den Radioordnern der obersten Ebene zugewiesen werden. Außerdem muss die MediaSession sowohl
playFromMediaId
als auchplayFromUri
unterstützen. Der URI ist jedoch in erster Linie für die Extraktion von Radiometadaten (z. B. FM-Frequenz) und die dauerhafte Speicherung vorgesehen. Es kann nicht garantiert werden, dass der URI für alle Medienelemente verfügbar ist, z. B. wenn der primäre ID-Typ noch nicht vom Framework unterstützt wird. Die Medien-ID funktioniert dagegen immer. Es wird nicht empfohlen, dass Clients URIs verwenden, um Elemente aus der aktuellen MediaBrowser-Sitzung auszuwählen. Verwenden Sie stattdessenplayFromMediaId
. Für die Auslieferungs-App ist er jedoch obligatorisch und fehlende URIs sind nur in gut begründeten Fällen zulässig.Im ursprünglichen Design wurde nach dem Schemateil ein einzelner Doppelpunkt anstelle der
://
-Sequenz verwendet. Letztere werden jedoch vonandroid.net.Uri
für absolute hierarchische URI-Referenzen nicht unterstützt.Andere Quelltypen
Andere Audioquellen können ähnlich behandelt werden. z. B. AUX-Eingang und Audio-CD-Player.
Eine einzelne App kann mehrere Arten von Quellen bereitstellen. In solchen Fällen empfehlen wir, für jede Art von Quelle einen separaten MediaBrowserService zu erstellen. Auch bei einer Einrichtung mit mehreren bereitgestellten Quellen/MediaBrowserServices wird dringend empfohlen, innerhalb einer einzelnen App eine einzelne MediaSession zu verwenden.
Audio-CD
Ähnlich wie bei Audio-CDs stellt die App, die solche Laufwerke bereitstellt, MediaBrowser einen einzelnen durchsuchbaren Eintrag (oder mehrere, wenn das System einen CD-Wechsler hat) zur Verfügung, der wiederum alle Titel einer bestimmten CD enthält. Wenn das System keine Informationen zu den Titeln auf jeder CD hat (z. B. wenn alle Laufwerke gleichzeitig in ein Laufwerk eingesetzt werden und nicht alle gelesen werden), ist das MediaItem für das gesamte Laufwerk nur
PLAYABLE
, nichtBROWSABLE
+PLAYABLE
. Wenn sich in einem bestimmten Steckplatz kein Laufwerk befindet, ist das Element wederPLAYABLE
nochBROWSABLE
. Jeder Steckplatz muss jedoch immer im Baum vorhanden sein.Diese Einträge werden ähnlich wie Ordner für Radiosender gekennzeichnet und enthalten zusätzliche Felder, die in der MediaDescription API definiert sind:
EXTRA_CD_TRACK
: Für jedeMediaItem
auf der Audio-CD die Titelnummer, beginnend mit 1.EXTRA_CD_DISK
: Laufwerksnummer, beginnend mit 1.
Bei einem CD-Text-kompatiblen System und einem kompatiblen Laufwerk hat das MediaItem der obersten Ebene den Titel des Laufwerks. Die MediaItems für Titel enthalten ebenfalls den Titel des Titels.
AUX-Eingang
Die App, die die Hilfseingabe bereitstellt, stellt einen MediaBrowser-Baum mit einem einzelnen Eintrag (oder mehreren, wenn mehrere Ports vorhanden sind) für den AUX-Eingang dar. Die jeweilige MediaSession nimmt ihre mediaId und wechselt nach Erhalt der
playFromMediaId
-Anfrage zu dieser Quelle.Jeder AUX-MediaItem-Eintrag hat ein zusätzliches Feld
EXTRA_AUX_PORT_NAME
, das auf den nicht lokalisierten Namen des Anschlusses ohne den Begriff „AUX“ festgelegt ist. Beispiel: „AUX 1“ muss auf „1“, „AUX vorne“ auf „vorne“ und „AUX“ auf einen leeren String gesetzt werden. In anderen Sprachen bleibt das Tag „name“ derselbe englische String. Im Gegensatz zuEXTRA_BCRADIO_BAND_NAME_EN
werden die Werte vom OEM definiert und sind nicht auf eine vordefinierte Liste beschränkt.Wenn die Hardware Geräte erkennt, die mit dem AUX-Port verbunden sind, sollte sie das MediaItem nur dann als
PLAYABLE
kennzeichnen, wenn der Eingang verbunden ist. Die Hardware sollte weiterhin aufgezählt werden (aber nichtPLAYABLE
), wenn an diesen Anschluss nichts angeschlossen ist. Wenn die Hardware diese Funktion nicht unterstützt, muss das MediaItem immer aufPLAYABLE
gesetzt werden.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 prüfen, für die das zusätzliche Feld
EXTRA_CD_DISK
oderEXTRA_AUX_PORT_NAME
festgelegt ist.Detaillierte Beispiele
In den folgenden Beispielen wird die MediaBrowser-Baumstruktur für Quelltypen beschrieben, die Teil dieses Designs sind.
MediaBrowserService für Rundfunk (
ACTION_PLAY_BROADCASTRADIO
):- Sender (aufrufbar)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
- URI für BBC One (abspielbar):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
- ABC 88.1 (abspielbar) – URI:
broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- ABC 88.1 HD1 (abspielbar) – URI:
broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- ABC 88.1 HD2 (abspielbar) – URI:
broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
- 90,5 FM (abspielbar) – UKW ohne RDSURI:
broadcastradio://program/AMFM_FREQUENCY/90500
- 620 AM (abspielbar) – URI:
broadcastradio://program/AMFM_FREQUENCY/620
- URI für BBC One (abspielbar):
broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
- URI für BBC One (abspielbar):
- Favoriten (aufrufbar, abspielbar)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- URI für BBC One (abspielbar):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- URI für BBC Two (nicht abspielbar):
broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- URI für BBC One (abspielbar):
- AM (aufrufbar, abspielbar):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
- 530 AM (abspielbar) – URI:
broadcastradio://program/AMFM_FREQUENCY/530
- 540 AM (abspielbar) – URI:
broadcastradio://program/AMFM_FREQUENCY/540
- 550 AM (abspielbar) – URI:
broadcastradio://program/AMFM_FREQUENCY/550
- 530 AM (abspielbar) – URI:
- FM (aufrufbar, abspielbar):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
- URI für 87,7 FM (abspielbar):
broadcastradio://program/AMFM_FREQUENCY/87700
- URI für 87,9 FM (abspielbar):
broadcastradio://program/AMFM_FREQUENCY/87900
- URI für 88,1 FM (abspielbar):
broadcastradio://program/AMFM_FREQUENCY/88100
- URI für 87,7 FM (abspielbar):
- DAB (abspielbar):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"
MediaBrowserService für Audio-CDs (
ACTION_PLAY_AUDIOCD
):- Datenträger 1 (abspielbar)
EXTRA_CD_DISK=1
- Datenträger 2 (aufrufbar, abspielbar)
EXTRA_CD_DISK=2
- Titel 1 (abspielbar)
EXTRA_CD_TRACK=1
- Track 2 (abspielbar)
EXTRA_CD_TRACK=2
- Titel 1 (abspielbar)
- Meine Musik-CD (durchsuchbar, abspielbar)
EXTRA_CD_DISK=3
- All By Myself (spielbar)
EXTRA_CD_TRACK=1
- Reise, Reise (spielbar)
EXTRA_CD_TRACK=2
- All By Myself (spielbar)
- Leere Position 4 (nicht spielbar)
EXTRA_CD_DISK=4
AUX MediaBrowserService (
ACTION_PLAY_AUX
verarbeitet):- AUX-Anschluss vorne (abspielbar)
EXTRA_AUX_PORT_NAME="front"
- AUX-Eingang hinten (abspielbar)
EXTRA_AUX_PORT_NAME="rear"