Implementacja sterowania radiem opiera się na interfejsach MediaSession
i MediaBrowse
, które umożliwiają aplikacjom do obsługi multimediów i asystenta głosowego sterowanie radiem. Więcej informacji znajdziesz na stronie Tworzenie aplikacji multimedialnych na samochody na stronie developer.android.com.
Implementacja drzewa przeglądania multimediów jest dostępna w bibliotece car-broadcastradio-support w packages/apps/Car/libs
. Biblioteka zawiera też rozszerzenia klasy ProgramSelector do konwertowania do i z identyfikatorów URI. Zalecamy, aby implementacje radia używały tej biblioteki do tworzenia powiązanego drzewa przeglądania.
Przełącznik źródeł multimediów
Aby zapewnić płynne przejście między radiem a innymi aplikacjami wyświetlanymi w multimediach, biblioteka car-media-common zawiera klasy, które należy zintegrować z aplikacją radia. MediaAppSelectorWidget
może być uwzględniona w pliku XML aplikacji radia (ikona i menu używane w aplikacji referencyjnej i aplikacji radia):
<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" />
Ten widżet uruchamia panel AppSelectionFragment
, w którym wyświetlana jest lista źródeł multimediów, do których można przełączyć się z obecnego źródła. Jeśli chcesz użyć innego interfejsu, możesz utworzyć niestandardowy widget, aby uruchomić AppSelectionFragment
, gdy ma się wyświetlić przełącznik.
AppSelectionFragment newFragment = AppSelectionFragment.create(widget, packageName, fullScreen); newFragment.show(mActivity.getSupportFragmentManager(), null);
Przykładowa implementacja znajduje się w przykładowej aplikacji radiowej, która znajduje się w packages/apps/Car/Radio
.
Szczegółowe specyfikacje
Interfejs MediaSession
(poprzez MediaSession.Callback
) udostępnia mechanizmy sterowania aktualnie odtwarzanym programem radiowym:
onPlay
,onStop
. (wy)ciszanie odtwarzania radia.onPause
. Pauza z przesunięciem czasowym (jeśli jest obsługiwana).onPlayFromMediaId
. Odtwarzaj dowolne treści z folderu najwyższego poziomu. Na przykład „Odtwórz FM” lub „Odtwórz radio”.onPlayFromUri
. Odtwarzanie określonej częstotliwości. Na przykład „Odtwórz 88,5 FM”.onSkipToNext
,onSkipToPrevious
. Przełącz się na następną lub poprzednią stację.onSetRating
. Dodawanie i usuwanie z ulubionych.
MediaBrowser udostępnia możliwość dostosowania MediaItem do trzech typów katalogów najwyższego poziomu:
- (opcjonalnie) Programy (stacje). Ten tryb jest zwykle używany przez radio z podwójnym tunerem do wskazywania wszystkich dostępnych stacji radiowych w lokalizacji użytkownika.
- Ulubione. programy radiowe dodane do listy Ulubione, z których niektóre mogą być niedostępne (poza zasięgiem odbioru);
- Kanały pasma Wszystkie możliwe kanały w bieżącym regionie (87.9, 88.1, 88.3, 88.5, 88.7, 88.9, 89.1 itd.). Każdy zespół ma osobny katalog najwyższego poziomu.
Każdy element w każdym z tych folderów (AM/FM/Programs) jest elementem MediaItem z identyfikatorem URI, który może być użyty w MediaSession do przełączenia. Każdy folder najwyższego poziomu (AM/FM/Programy) to element MediaItem z identyfikatorem mediaId, który może być używany z MediaSession do uruchamiania odtwarzania. To zależy od producenta OEM. Na przykład „Odtwórz FM”, „Odtwórz AM” i „Odtwórz radio” to niespecyficzne zapytania dotyczące radia, które używają identyfikatora mediaId do wysłania do aplikacji radiowej OEM. To aplikacja radiowa decyduje, co odtworzyć na podstawie ogólnego zapytania i identyfikatora mediaId.
MediaSession
Ponieważ nie ma możliwości wstrzymania strumienia transmisji, działania odtwarzania, wstrzymywania i zatrzymywania nie zawsze mają zastosowanie do radia. W przypadku radia działanie „Zatrzymaj” jest powiązane z wyciszeniem strumienia, a „Odtwórz” – z odwróceniem wyciszenia.
Niektóre tunery radiowe (lub aplikacje) umożliwiają symulowanie pauzy w transmisji, przechowując treści w pamięci podręcznej i odtwarzając je później. W takich przypadkach użyj onPause
.
Odtwarzanie za pomocą akcji mediaId i URI jest przeznaczone do dostrajania stacji pobranej z interfejsu MediaBrowser. mediaId to dowolny ciąg znaków udostępniany przez aplikację radiową w celu narzucenia unikalnej (aby dany identyfikator wskazywał tylko jeden element) i stabilnej (aby dany element miał ten sam identyfikator przez całą sesję) wartości, za pomocą której można zidentyfikować daną stację. Identyfikator URI będzie miał dobrze zdefiniowany schemat. Krótko mówiąc, jest to postać URI funkcji ProgramSelector. Chociaż atrybut unikalności jest zachowany, nie musi być stabilny, ale może się zmienić, gdy stacja przejdzie na inną częstotliwość.
Z założenia onPlayFromSearch
nie jest używany. Wybór wyniku wyszukiwania z drzewa MediaBrowser należy do klienta (aplikacji towarzyszącej). Przeniesienie tej odpowiedzialności na aplikację radiową zwiększyłoby złożoność, wymagałoby formalnych umów dotyczących tego, jak powinny wyglądać zapytania dotyczące ciągów znaków, i spowodowałoby nierówne wrażenia użytkowników na różnych platformach sprzętowych.
Uwaga: aplikacja radiowa nie zawiera dodatkowych informacji, które byłyby przydatne do wyszukiwania nazwy stacji niewyświetlanej klientowi w interfejsie MediaBrowser.
Przechodzenie do następnej lub poprzedniej stacji zależy od bieżącego kontekstu:
- Gdy aplikacja odtwarza stację z listy Ulubionych, może przejść do następnej stacji z tej listy.
- Słuchanie stacji z listy Program może spowodować przełączenie na kolejną dostępną stację, posortowaną według numeru kanału.
- Słuchanie dowolnego kanału może spowodować przestrojenie na następny kanał fizyczny, nawet jeśli nie ma sygnału nadawania.
Aplikacja radiowa obsługuje te działania.
Obsługa błędów
TransportControls
działania (odtwarzanie, zatrzymanie i przejście do następnego) nie dają informacji o tym, czy zostały wykonane. Jedynym sposobem na wskazanie błędu jest ustawienie stanu MediaSession na STATE_ERROR
z komunikatem o błędzie.
Aplikacja radiowa musi obsługiwać te działania i wykonywć je lub ustawiać stan błędu.
Jeśli wykonanie polecenia odtwarzania nie jest natychmiastowe, stan odtwarzania powinien zostać zmieniony na
STATE_CONNECTING
(w przypadku bezpośredniego odtwarzania) lub
STATE_SKIPPING_TO_PREVIOUS
lub
NEXT
podczas wykonywania polecenia.
Klient powinien obejrzeć
PlaybackState
i sprawdzić, czy sesja zmieniła bieżący program na ten, który został poproszony, lub weszła w stan błędu. STATE_CONNECTING
nie może przekraczać 30 sekund. Jednak bezpośrednie dostrojenie do danej częstotliwości AM/FM powinno być znacznie szybsze.
Dodawanie i usuwanie ulubionych
MediaSession obsługuje oceny, które można wykorzystać do kontrolowania ulubionych. onSetRating
wywoływany z typem oceny
RATING_HEART
dodaje lub usuwa aktualnie odbieraną stację z listy Ulubione.
W przeciwieństwie do starszych wstępnie ustawionych wartości ten model zakłada nieuporządkowaną i nieograniczoną listę ulubionych, na której każde zapisane ulubione było przypisane do miejsca numerycznego (zazwyczaj 1–6).
W rezultacie systemy oparte na wstępnie ustawionych wartościach byłyby niezgodne z funkcją onSetRating
Ograniczenie interfejsu MediaSession API polega na tym, że można dodawać i usuwać tylko stację, która jest obecnie odtwarzana. Na przykład elementy muszą być najpierw wybrane, zanim można je usunąć. Jest to ograniczenie tylko dla klienta MediaBrowser, np. aplikacji towarzyszącej. Aplikacja radiowa nie jest w taki sposób ograniczona. Ten fragment jest opcjonalny, gdy aplikacja nie obsługuje ulubionych.
MediaBrowser
Aby określić, które częstotliwości lub nazwy kanałów fizycznych (gdy strojenie na dowolny kanał jest odpowiednie dla danej technologii radiowej) są ważne w danym regionie, dla każdego pasma podawane są wszystkie prawidłowe kanały (częstotliwości). W Stanach Zjednoczonych jest to 101 kanałów FM w zakresie od 87,8 do 108,0 MHz (z odstępem 0,2 MHz) oraz 117 kanałów AM w zakresie od 530 do 1700 kHz (z odstępem 10 kHz). Radio HD używa tego samego miejsca na kanale, dlatego nie jest prezentowane osobno.
Lista obecnie dostępnych programów radiowych jest płaska, ponieważ nie pozwala na wyświetlanie schematów takich jak grupowanie według zestawu transmisji audio (DAB).
Elementy na liście Ulubione mogą nie być dostępne do dostosowania. Na przykład, jeśli dany program jest poza zasięgiem. Aplikacja radiowa może wykryć, czy można ustawić stację z wyprzedzeniem. W takim przypadku może nie oznaczyć wpisu jako odtwarzalny.
Aby zidentyfikować foldery najwyższego poziomu, stosuje się ten sam mechanizm co w przypadku Bluetootha.
Oznacza to, że pakiet dodatkowych funkcji obiektu
MediaDescription
zawiera pole dotyczące tunera, tak jak w przypadku Bluetooth w obiekcie
EXTRA_BT_FOLDER_TYPE
.
W przypadku radia nadawczego prowadzi to do zdefiniowania w interfejsie API publicznego tych nowych pól:
EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE"
. Jedna z tych wartości:BCRADIO_FOLDER_TYPE_PROGRAMS = 1
. Dostępne obecnie programy.BCRADIO_FOLDER_TYPE_FAVORITES = 2
Ulubione.BCRADIO_FOLDER_TYPE_BAND = 3
. Wszystkie kanały fizyczne w danym paśmie.
Nie trzeba definiować żadnych pól niestandardowych metadanych dotyczących radia, ponieważ wszystkie istotne dane pasują do istniejącego schematu
MediaBrowser.MediaItem
:- Nazwa programu (RDS PS, nazwa usługi DAB).
MediaDescription.getTitle
. - Częstotliwość FM. identyfikator URI (patrz ProgramSelector) lub
MediaDescription.getTitle
(jeśli wpis znajduje się w folderzeBROADCASTRADIO_FOLDER_TYPE_BAND
). - Identyfikatory specyficzne dla radia (RDS PI, DAB SId).
MediaDescription.getMediaUri
przeanalizowany jako ProgramSelector.
Zwykle nie trzeba pobierać częstotliwości FM dla wpisu na liście bieżącego programu lub ulubionych (ponieważ klient powinien działać na identyfikatorach mediów). Jeśli jednak zajdzie taka potrzeba (np. ze względów wyświetlania), znajdziesz go w identyfikatorze URI, gdzie można go przeanalizować jako
ProgramSelector
. Nie zalecamy jednak używania identyfikatora URI do wybierania elementów w bieżącej sesji. Więcej informacji znajdziesz w artykuleProgramSelector
.Aby uniknąć problemów z wydajnością lub problemami związanymi z usługą binder, usługa MediaBrowser musi obsługiwać podział na strony:
EXTRA_PAGE
EXTRA_PAGE_SIZE
- Dodatkowe parametry zdarzenia
subscribe()
Uwaga: podział na strony jest domyślnie stosowany w wersji
onLoadChildren()
bez obsługi opcji.Powiązane wpisy ze wszystkich typów list (kanały, znalezione programy i ulubione) mogą mieć różne identyfikatory mediaId (to zależy od aplikacji radiowej; biblioteka obsługi będzie mieć inne identyfikatory). Adresy URI (w formie elementu ProgramSelector) różnią się w większości przypadków między znalezionymi kanałami i programami (z wyjątkiem FM bez RDS), ale są w większości takie same między znalezionymi programami a ulubionymi (z wyjątkiem sytuacji, gdy AF zostało zaktualizowane).
Różne identyfikatory mediaId dla wpisów z różnych typów list umożliwiają wykonywanie różnych działań. Możesz przejść na listę Ulubione lub na listę Wszystkie programy w sekcji
onSkipToNext
, w zależności od folderu ostatnio wybranegoMediaItem
(patrz MediaSession).Działania dotyczące specjalnego dostosowania
Lista programów umożliwia użytkownikom nastrojenie określonej stacji, ale nie pozwala na wysyłanie ogólnych żądań, takich jak „Ustaw FM”, które mogłyby spowodować ustawienie ostatnio słuchanej stacji na paśmie FM.
Aby umożliwić takie działania, niektóre katalogi najwyższego poziomu mają ustawiony flagę
FLAG_PLAYABLE
(orazFLAG_BROWSABLE
w przypadku folderów).Działanie Dostrojenie Jak wydać Włącz radio Dowolny kanał radiowy startService(ACTION_PLAY_BROADCASTRADIO)
LUB
playFromMediaId(MediaBrowser.getRoot())
Włącz radio dowolny kanał FM, Odtwarzanie z poziomu mediaId
pasma FM.Wybór programu należy do aplikacji. Zwykle jest to ostatnio wybrany kanał z danej listy. Więcej informacji o
ACTION_PLAY_BROADCASTRADIO
znajdziesz w artykule Ogólne intencje dotyczące rozgrywki.Wykrywanie i łączenie z usługą
PackageManager
może bezpośrednio znaleźć MediaBrowserService obsługujący drzewo radiofonii. Aby to zrobić, wywołaj funkcjęresolveService
z za pomocą intencjiACTION_PLAY_BROADCASTRADIO
(patrz Ogólne intencje odtwarzania) i flagiMATCH_SYSTEM_ONLY
. Aby znaleźć wszystkie usługi, które dostarczają radio (może ich być więcej niż 1, na przykład AM/FM i satelita), użyj opcjiqueryIntentServices
.Rozpoznana usługa obsługuje też intent
android.media.browse.MediaBrowserService
bind. Zostało to zweryfikowane przez GTS.Aby połączyć się z wybraną usługą MediaBrowserService, utwórz instancję
MediaBrowser
dla danego komponentu usługi iconnect
. Po nawiązaniu połączenia możesz uzyskać identyfikator MediaSession za pomocą funkcjigetSessionToken
.Aplikacja Radio może ograniczać pakiety klientów, które mogą się łączyć w ramach implementacji usługi
onGetRoot
. Aplikacja powinna zezwalać aplikacjom systemowym na łączenie się bez umieszczania ich na białej liście. Szczegółowe informacje na temat umieszczania aplikacji na białej liście znajdziesz w artykule Akceptowanie pakietu i podpisu aplikacji Asystent.Jeśli aplikacja związana z konkretnym źródłem (np. aplikacja radiowa) jest zainstalowana na urządzeniu bez obsługi takiego źródła, nadal będzie się reklamować jako obsługująca intencję
ACTION_PLAY_BROADCASTRADIO
, ale jej drzewo MediaBrowser nie będzie zawierać tagów związanych z radiem. Dlatego klient, który chce sprawdzić, czy dany zasób jest dostępny na urządzeniu, musi:- Odkryj usługę radiową (wywołaj
resolveService
dlaACTION_PLAY_BROADCASTRADIO
). - Utwórz
MediaBrowser
i połącz się z nim. - Określ obecność
MediaItem
zEXTRA_BCRADIO_FOLDER_TYPE
dodatkowo.
Uwaga: w większości przypadków klient musi skanować wszystkie dostępne drzewa MediaBrowser, aby wykryć wszystkie dostępne źródła dla danego urządzenia.
nazwy zespołów,
Lista zespołów jest reprezentowana przez zestaw katalogów najwyższego poziomu z tagiem typu folderu ustawionym na
BCRADIO_FOLDER_TYPE_BAND
. TytułyMediaItem
są zlokalizowanymi ciągami znaków reprezentującymi nazwy zespołów. W większości przypadków będzie to ten sam tekst, co w tłumaczeniu angielskim, ale klient nie może tego założyć.Aby zapewnić stabilny mechanizm wyszukiwania niektórych pasm, do folderów pasm dodano dodatkowy tag,
EXTRA_BCRADIO_BAND_NAME_EN
. To nieprzetłumaczona nazwa pasma. Może ona przyjmować jedną z tych wstępnie zdefiniowanych wartości:AM
FM
DAB
Jeśli zespołu nie ma na tej liście, nie należy ustawiać tagu nazwy zespołu. Jeśli jednak pasmo znajduje się na liście, musi mieć ustawiony tag. Radio HD nie wymienia osobnych pasm, ponieważ wykorzystuje te same podstawowe nośniki co AM/FM.
Intencje związane z ogólnymi grami
Każda aplikacja przeznaczona do odtwarzania danego źródła (np. radia lub płyty CD) musi obsługiwać ogólny intencjonalny odtwarzania, aby rozpocząć odtwarzanie treści, nawet z nieaktywnego stanu (np. po uruchomieniu). Aplikacja decyduje, jakie treści odtwarzać, ale zwykle jest to ostatnio odtwarzany program radiowy lub utwór z CD.Dla każdego źródła dźwięku zdefiniowano osobny zamiar:
android.car.intent.action.PLAY_BROADCASTRADIO
android.car.intent.action.PLAY_AUDIOCD
: CD-DA lub CD-Textandroid.car.intent.action.PLAY_DATADISC
: optyczny dysk danych, np. CD/DVD, ale nie CD-DA (może być CD w trybie mieszanym).android.car.intent.action.PLAY_AUX
: bez określania, z którego portu AUXandroid.car.intent.action.PLAY_BLUETOOTH
android.car.intent.action.PLAY_USB
: bez określenia urządzenia USBandroid.car.intent.action.PLAY_LOCAL
: Pamięć na multimedia (wbudowana pamięć flash)
Intencje zostały wybrane do użycia w przypadku ogólnego polecenia odtwarzania, ponieważ rozwiązują one dwa problemy naraz: ogólne polecenie odtwarzania i wykrywanie usługi. Dodatkową zaletą takiego zamiaru byłaby możliwość wykonania takiego prostego działania bez otwierania sesji MediaBrowser.
Wykrywanie usług jest w istocie ważniejszym problemem rozwiązywanym przez te intencje. W ten sposób procedura wykrywania usługi jest łatwa i jednoznaczna (patrz Wykrywanie i łączenie usług).
Aby ułatwić niektóre implementacje klienta, istnieje alternatywny sposób wydawania takiego polecenia odtwarzania (które musi być również zaimplementowane przez aplikację radio): wydawanie polecenia
playFromMediaId
z identyfikatorem rootId węzła głównego (używanym jako identyfikator mediaId). Węzeł rdzeniowy nie jest przeznaczony do odtwarzania, ale jego identyfikator rootId to dowolny ciąg znaków, który można ustawić jako identyfikator mediaId. Klienci nie muszą jednak rozumieć tych niuansów.ProgramSelector
Chociaż
mediaId
wystarcza do wybrania kanału zMediaBrowserService
, staje się on powiązany z sesją i nie jest spójny między dostawcami. W niektórych przypadkach klient może potrzebować wskaźnika bezwzględnego (np. bezwzględnej częstotliwości), aby zachować go między sesjami i urządzeniami.W erze cyfrowych transmisji radiowych sama częstotliwość nie wystarczy do nastrojenia się na konkretną stację. Dlatego użyj
ProgramSelector
, aby przełączyć się na kanał analogowy lub cyfrowy.ProgramSelector
składa się z 2 części:- Główny identyfikator. Unikalny i stabilny identyfikator danej stacji radiowej, który nie zmienia się, ale może nie wystarczyć do jej wybrania. Na przykład: kod PI RDS, który może być tłumaczony na znak wywoławczy w Stanach Zjednoczonych.
- Identyfikatory dodatkowe dodatkowe identyfikatory przydatne do nastrojenia danej stacji (np. częstotliwość), w tym identyfikatory z innych technologii radiowych; Na przykład stacja DAB może mieć alternatywne analogowe nadawanie.
Aby umożliwić
ProgramSelector
dopasowanie do rozwiązania opartego naMediaBrowser
lubMediaSession
, zdefiniuj schemat identyfikatora URI, aby go zserializować. Schemat jest zdefiniowany w ten sposób:broadcastradio://program/<primary ID type>/<primary ID>? <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>
W tym przykładzie część dotycząca dodatkowych identyfikatorów (po znaku zapytania (
?
)) jest opcjonalna i może zostać usunięta, aby zapewnić stabilny identyfikator do użycia jakomediaId
. Przykład: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
Część autorytatywna (czyli host) w
program
pozostawia pewną przestrzeń na rozszerzenie schematu w przyszłości. Ciągi znaków typu identyfikatora są dokładnie określone jako ich nazwy w definicjiIdentifierType
w HAL 2.x, a format wartości to liczba dziesiętna lub szesnastkowa (z przedrostkiem0x
).Wszystkie identyfikatory specyficzne dla dostawcy są reprezentowane przez prefiks
VENDOR_
. Na przykładVENDOR_0
zamiastVENDOR_START
iVENDOR_1
zamiastVENDOR_START
+ 1. Takie identyfikatory URI są specyficzne dla sprzętu radiowego, na którym zostały wygenerowane, i nie można ich przenieść między urządzeniami różnych producentów.Te identyfikatory URI muszą zostać przypisane do każdego elementu multimedialnego w folderach najwyższego poziomu w folderach radia. Dodatkowo MediaSession musi obsługiwać zarówno
playFromMediaId
, jak iplayFromUri
. Identyfikator URI jest jednak przeznaczony przede wszystkim do wyodrębniania metadanych radia (np. częstotliwości FM) i trwałego przechowywania. Nie ma gwarancji, że adres URI będzie dostępny w przypadku wszystkich elementów multimedialnych (na przykład gdy główny typ identyfikatora nie jest jeszcze obsługiwany przez platformę). Z drugiej strony identyfikator multimediów zawsze działa. Nie zalecamy używania przez klientów identyfikatorów URI do wybierania elementów z bieżącej sesji MediaBrowser. Zamiast tego użyjplayFromMediaId
. Nie jest to jednak opcjonalne w przypadku aplikacji wyświetlającej reklamy, a brakujące identyfikatory URI są zarezerwowane dla uzasadnionych przypadków.W pierwotnym projekcie zamiast sekwencji
://
po części schematu używano pojedynczego dwukropka. Jednak w przypadku bezwzględnych odwołań do hierarchicznych identyfikatorów URI usługaandroid.net.Uri
nie obsługuje pierwszego z nich.Inne typy źródeł
Inne źródła dźwięku można obsługiwać w podobny sposób. Na przykład wejście pomocnicze i odtwarzacz płyt CD Audio.
Jedna aplikacja może wyświetlać treści pochodzące z różnych źródeł. W takich przypadkach zalecamy utworzenie osobnego MediaBrowserService dla każdego typu źródła. Nawet w przypadku konfiguracji z wieloma obsługiwanymi źródłami/usługami MediaBrowserServices zdecydowanie zalecamy użycie jednej sesji MediaSession w ramach jednej aplikacji.
Płyta CD z muzyką
Podobnie jak w przypadku płyt CD z muzyką, aplikacja obsługująca takie dyski wyświetla MediaBrowser z jednym elementem do przeglądania (lub więcej, jeśli system ma zmieniacz CD), który zawiera wszystkie utwory z danego CD. Jeśli system nie ma informacji o ścieżkach na każdym CD (na przykład gdy wszystkie dyski są włożone do kartridża naraz, a system nie odczytuje ich wszystkich), MediaItem dla całego dysku będzie tylko
PLAYABLE
, a nieBROWSABLE
plusPLAYABLE
. Jeśli w danym gnieździe nie ma dysku, element nie będzie aniPLAYABLE
, aniBROWSABLE
(ale każdy gniazd zawsze musi być obecny w drzewie).Te wpisy byłyby oznaczone w podobny sposób jak foldery z transmisją radiową. Zawierałyby dodatkowe pola zdefiniowane w interfejsie MediaDescription API:
EXTRA_CD_TRACK
: dla każdegoMediaItem
na CD audio numer ścieżki zaczynający się od 1.EXTRA_CD_DISK
: numer dysku oparty na 1.
W przypadku systemu obsługującego CD-Text i zgodnego dysku element MediaItem najwyższego poziomu miałby tytuł dysku. Podobnie MediaItems dla utworów będą zawierać tytuł utworu.
Wejście dodatkowe
Aplikacja, która obsługuje wejście pomocnicze, udostępnia drzewo MediaBrowser z jednym wpisem (lub więcej, jeśli istnieje więcej portów) reprezentującym port AUX. Odpowiednia sesja MediaSession pobiera identyfikator mediaId i przełącza się na to źródło po otrzymaniu żądania
playFromMediaId
.Każdy wpis AUX MediaItem miałby dodatkowe pole
EXTRA_AUX_PORT_NAME
z nieprzetłumaczoną nazwą portu bez frazy „AUX”. Na przykład „AUX 1” ma być ustawiony na „1”, „AUX front” na „front”, a „AUX” na pusty ciąg znaków. W językach innych niż angielski tag name będzie zawierał ten sam ciąg znaków w języku angielskim. Nieprawdopodobne, ponieważ w przypadkuEXTRA_BCRADIO_BAND_NAME_EN
wartości są definiowane przez producenta OEM i nie są ograniczone do wstępnie zdefiniowanej listy.Jeśli sprzęt może wykryć urządzenia podłączone do portu AUX, powinien oznaczyć MediaItem jako
PLAYABLE
tylko wtedy, gdy wejście jest podłączone. Sprzęt powinien nadal być wymieniony (ale niePLAYABLE
), jeśli do tego portu nie było podłączone żadne urządzenie. Jeśli sprzęt nie ma takiej możliwości, element MediaItem musi być zawsze ustawiony naPLAYABLE
.Dodatkowe pola
Zdefiniuj te pola:
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"
Klient musi sprawdzić elementy na najwyższym poziomie MediaItems pod kątem elementów z dodatkowymi polami
EXTRA_CD_DISK
lubEXTRA_AUX_PORT_NAME
.Szczegółowe przykłady
Poniższe przykłady dotyczą struktury drzewa MediaBrowser w przypadku typów źródeł, które są częścią tego projektu.
MediaBrowserService radia nadawczego (obsługuje
ACTION_PLAY_BROADCASTRADIO
):- Stacje (możliwość przeglądania)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
- Identyfikator URI BBC One (do odtworzenia):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
- ABC 88.1 (do odtworzenia) URI:
broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- ABC 88.1 HD1 (do odtworzenia) URI:
broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- ABC 88.1 HD2 (do odtworzenia) URI:
broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
- 90,5 FM (można odtwarzać) – FM bez RDSURI:
broadcastradio://program/AMFM_FREQUENCY/90500
- 620 AM (do odtworzenia) URI:
broadcastradio://program/AMFM_FREQUENCY/620
- Identyfikator URI BBC One (do odtworzenia):
broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
- Identyfikator URI BBC One (do odtworzenia):
- Ulubione (można przeglądać i odtwarzać)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- Identyfikator URI BBC One (do odtworzenia):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- BBC Two (niedostępny do odtworzenia) identyfikator URI:
broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- Identyfikator URI BBC One (do odtworzenia):
- AM (możliwość przeglądania i odtwarzania):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
- 530 AM (do odtworzenia) URI:
broadcastradio://program/AMFM_FREQUENCY/530
- 540 AM (do odtworzenia) URI:
broadcastradio://program/AMFM_FREQUENCY/540
- 550 AM (do odtworzenia) URI:
broadcastradio://program/AMFM_FREQUENCY/550
- 530 AM (do odtworzenia) URI:
- FM (możliwość przeglądania i odtwarzania):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
- 87,7 FM (do odtworzenia) URI:
broadcastradio://program/AMFM_FREQUENCY/87700
- 87,9 FM (do odtworzenia) URI:
broadcastradio://program/AMFM_FREQUENCY/87900
- 88,1 FM (do odtworzenia) URI:
broadcastradio://program/AMFM_FREQUENCY/88100
- 87,7 FM (do odtworzenia) URI:
- DAB (można odtworzyć):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"
Audio CD MediaBrowserService (obsługuje
ACTION_PLAY_AUDIOCD
):- Płyta 1 (do odtwarzania)
EXTRA_CD_DISK=1
- Płyta 2 (możliwość przeglądania i odtwarzania)
EXTRA_CD_DISK=2
- Ścieżka 1 (można odtworzyć)
EXTRA_CD_TRACK=1
- Utwór 2 (można odtworzyć)
EXTRA_CD_TRACK=2
- Ścieżka 1 (można odtworzyć)
- Moje CD z muzyką (można przeglądać, odtwarzać)
EXTRA_CD_DISK=3
- All By Myself (playable)
EXTRA_CD_TRACK=1
- Reise, Reise (do odtworzenia)
EXTRA_CD_TRACK=2
- All By Myself (playable)
- Pusty slot 4 (niedostępny do odtworzenia)
EXTRA_CD_DISK=4
AUX MediaBrowserService (obsługuje
ACTION_PLAY_AUX
):- AUX front (playable)
EXTRA_AUX_PORT_NAME="front"
- AUX tył (można odtworzyć)
EXTRA_AUX_PORT_NAME="rear"