Implementacja sterowania zdalnego

Implementacja sterowania radiowego opiera się na MediaSession i MediaBrowse, które włączają aplikacjom Asystenta głosowego i multimediów, sterować radiem. Więcej informacji: Tworzenie aplikacji do multimediów dla samochodów na developer.android.com

Implementacja drzewa przeglądania multimediów jest zapewniana przez funkcję obsługi samochodu-broadcastradio- biblioteka w usłudze packages/apps/Car/libs. Ta biblioteka zawiera również rozszerzenia: Element ProgramSelector do konwersji na i z URI. Zaleca się, aby reklamy radiowe za pomocą tej biblioteki do utworzenia powiązanego drzewa przeglądania.

Przełącznik źródła multimediów

Aby umożliwić płynne przejście między radiem a innymi aplikacjami wyświetlanymi w multimediach, biblioteka car-media-common zawiera klasy, które powinny być zintegrowane z radiem. . MediaAppSelectorWidget można umieścić w pliku XML w przypadku aplikacji radiowej (ikona i menu używane w referencyjnej aplikacji multimedialnej i radiowej):

<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 interfejs AppSelectionFragment, który wyświetla Lista źródeł multimediów, na które można się przełączyć. Jeśli chcesz mieć interfejs inny niż ten, możesz utworzyć niestandardowy widżet, który będzie uruchamiać aplikację AppSelectionFragment, gdy powinien wyświetlić się przełącznik.

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

Przykładowa implementacja jest podana w referencyjnej implementacji aplikacji radiowej, w lokalizacji: packages/apps/Car/Radio.

Szczegółowe specyfikacje dotyczące sterowania

MediaSession (przez MediaSession.Callback) interfejs zawiera mechanizmy sterowania aktualnie odtwarzanym programem radiowym:

  • onPlay, onStop. (Wyłącz) wyciszenie odtwarzania radia.
  • onPause Wstrzymanie z przesunięciem w czasie (jeśli jest obsługiwane).
  • onPlayFromMediaId Odtwarzaj dowolne treści z folderu najwyższego poziomu. Na przykład „Włącz FM”. lub „Włącz radio”.
  • onPlayFromUri Włącz konkretną częstotliwość. Na przykład „Włącz 88,5 FM”.
  • onSkipToNext, onSkipToPrevious. Dostrój do następnego lub poprzedniego .
  • onSetRating dodawać do ulubionych lub usuwać je z ulubionych;

Przeglądarka Media Browser udostępnia MediaItem w 3 typach katalogów najwyższego poziomu:

  • (Opcjonalnie) Programy (stacje). Ten tryb jest zwykle używany przez z podwójnym tunerem do wskazywania wszystkich dostępnych stacji radiowych w lokalizacji użytkownika, które można dostroić.
  • Ulubione. Programy radiowe dodane do listy Ulubione, niektóre z nich niedostępny (poza zasięgiem odbioru).
  • Kanały pasma. Wszystkie fizycznie dostępne kanały w obecnym regionie (87.9, 88.1, 88.3, 88.5, 88.7, 88.9, 89.1 i tak dalej). Każde pasmo ma oddzielny katalog najwyższego poziomu.
.
Struktura drzewa Media BrowserService
Rys. 2. Struktura drzewa Media BrowserService
.

Każdy element w każdym z tych folderów (AM/FM/Programs) to element MediaItem z identyfikatorem URI, którego można użyć za pomocą MediaSession, Każdy folder najwyższego poziomu (AM/FM/Programs) to element MediaItem z identyfikatorem mediaId, mogą być używane razem z MediaSession do aktywowania odtwarzania. Decyzja należy do producenta OEM. Dla: na przykład „Włącz FM”, „Włącz AM”, i „Włącz radio” to niekonkretne zapytania radiowe, w których użyto mediaId do wysłania do aplikacji radiowej OEM. To aplikacja radiowa określa, co chcesz odtworzyć i mediaId.

Sesja Media

Nie ma koncepcji wstrzymywania transmisji, działania odtwarzania, wstrzymania i zatrzymania. nie zawsze dotyczą radia. W przypadku radia zatrzymanie dotyczy wyciszenia transmisji a Google Play jest powiązane z usunięciem wyciszenia.

Niektóre tunery (lub aplikacje) umożliwiają symulowanie wstrzymywania transmisji przez buforowanie treści i odtwarzanie ich później. W takich przypadkach należy użyć onPause.

Odtwarzanie z działań mediaId i identyfikatora URI ma na celu dostrajanie do stacji pobrane z interfejsu Media Browser. Identyfikator mediaId jest dowolnym ciągiem znaków. udostępniane przez aplikację radiową w celu nałożenia unikalnego (np. dany identyfikator wskazuje tylko jeden element) i stały (czyli mieć ten sam identyfikator przez całą sesję) jako wartość, z którą do zidentyfikowania konkretnej stacji. Identyfikator URI musi mieć dobrze zdefiniowany schemat. Krótko mówiąc, identyfikator URI jest to swego rodzaju ProgramSelector. Pozwala to zachować atrybut równości, ale nie musi być stabilna, ale może się zmienić, gdy stacja zmieni częstotliwość.

Z założenia interfejs onPlayFromSearch nie jest używany. To jest obowiązkiem klienta (aplikacja towarzysząca), aby wybrać wynik wyszukiwania z drzewa Media Browser. Ruchoma że odpowiedzialność za tę aplikację radiową komplikuje proces, wymaga zawarcia formalnych umów powinny pojawiać się w zapytaniach w postaci ciągów znaków, co może powodować nierównomierne korzystanie z różnych urządzeń platform.

Uwaga: aplikacja radiowa nie zawiera dodatkowych informacje przydatne przy wyszukiwaniu nazwy stacji, która nie jest widoczna dla klienta za pomocą interfejsu Media Browser.

Przejście do następnej lub poprzedniej stacji zależy od bieżącego kontekstu:

  • Gdy aplikacja zostanie dostrojona do stacji z listy Ulubione, może przejść do następnej stacji z listy Ulubione.
  • Posłuchanie stacji z listy programów może spowodować dostrojenie do następnej dostępnych stacji, posortowanych według numeru kanału.
  • Posłuchanie dowolnego kanału może skutkować przejściem na następny kanał fizyczny, nawet gdy nie ma sygnału.

Te działania wykonuje aplikacja radiowa.

Obsługa błędów

TransportControls działania (Odtwórz, Zatrzymaj i Dalej) nie informują, czy dane działanie czy nie powiedzie się. Jedynym sposobem na wskazanie błędu jest ustawienie parametru MediaSession stan na STATE_ERROR z komunikatem o błędzie.

Aplikacja radiowa musi obsługiwać te działania i albo je wykonywać, albo ustawiać stan błędu. Jeśli polecenie odtwarzania nie jest wykonywane natychmiast, stan odtwarzania powinien zostać zmieniony na STATE_CONNECTING (w przypadku dostrajania bezpośredniego) lub STATE_SKIPPING_TO_PREVIOUS lub NEXT w trakcie wykonywania polecenia.

Klient powinien obejrzeć: PlaybackState i sprawdź, czy sesja zmieniła bieżący program na ten, o który prosiliśmy lub wpisano. . Wartość STATE_CONNECTING nie może przekraczać 30 s. Jednak bezpośrednie melodię Częstotliwość AM/FM powinna działać znacznie szybciej.

Dodawanie i usuwanie ulubionych

Funkcja MediaSession obsługuje oceny, której można używać do sterowania ulubionymi. onSetRating wywołana z oceną typu RATING_HEART dodaje aktualnie dostrojoną stację do Ulubionych lub ją z niej usuwa.

W przeciwieństwie do starszych gotowych ustawień w tym modelu założono nieuporządkowane i niepowiązane ulubione kiedy każde zapisane ulubione miejsce zostało przypisane do numeru liczbowego (zwykle od 1 do 6). W efekcie systemy oparte na gotowych ustawieniach byłyby niezgodne z zasadą onSetRating. .

Ograniczenie interfejsu MediaSession API polega na tym, że obecnie nastrojowana jest tylko stacja co można dodać lub usunąć. Na przykład elementy należy najpierw wybrać, zanim zostaną można usunąć. Jest to jedynie ograniczenie klienta Media Browser, takie jak aplikacji towarzyszącej. Aplikacja radiowa nie jest w podobny sposób ograniczona. Ta część jest opcjonalna gdy aplikacja nie obsługuje Ulubionych.

MediaBrowser

Określanie częstotliwości lub nazw kanałów fizycznych (podczas dostrajania do dowolnego kanału odpowiedniego dla danej technologii radiowej) są odpowiednie dla w danym regionie, dla każdego pasma podane są wszystkie prawidłowe kanały (częstotliwości). W regionie Stanów Zjednoczonych jest to 101 kanałów FM z zakresu od 87, 8 do Zakres 108,0 MHz (z odstępem 0,2 MHz) i kanały 117 AM w zakresie 530 MHz do 1700 kHz (z odstępami 10 kHz). Ponieważ radio HD wykorzystuje tę samą przestrzeń kanału, nie jest przedstawiany oddzielnie.

Lista obecnie dostępnych programów radiowych jest płaska, ponieważ niedozwolone są schematy wyświetlania, np. grupowanie według zespołu bezpośredniej transmisji audio (DAB).

Wpisy na liście ulubionych mogą nie być możliwe do strojenia. Jeśli na przykład określony Program znajduje się poza zakresem. Aplikacja radiowa może, ale nie musi, wykryć wpis można wcześniej nastroić. Jeśli tak się stanie, może nie oznaczyć wpisu jako możliwego do odtworzenia.

Do identyfikowania folderów najwyższego poziomu stosowany jest ten sam mechanizm, który jest używany przez Bluetooth. Oznacza to, że pakiet dodatków to MediaDescription zawiera pole dotyczące tunera, tak samo jak Bluetooth w EXTRA_BT_FOLDER_TYPE. W przypadku radia radiowego oznacza to zdefiniowanie następujących nowych pól w sekcji publiczny interfejs API:

  • EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE" Jeden tych wartości:
    • BCRADIO_FOLDER_TYPE_PROGRAMS = 1 Aktualnie dostępne programy.
    • BCRADIO_FOLDER_TYPE_FAVORITES = 2 Ulubione.
    • BCRADIO_FOLDER_TYPE_BAND = 3 Wszystkie kanały fizyczne danego zespołu.

    Nie ma potrzeby definiowania żadnych niestandardowych pól metadanych, odpowiednie dane pasują do istniejącego schematu MediaBrowser.MediaItem:

    • Nazwa programu (RDS PS, nazwa usługi DAB). MediaDescription.getTitle.
    • Częstotliwość FM URI (patrz ProgramSelector) lub MediaDescription.getTitle (jeśli wpis znajduje się w folderze BROADCASTRADIO_FOLDER_TYPE_BAND).
    • Identyfikatory radiowe (RDS PI, DAB SId). MediaDescription.getMediaUri przeanalizowano jako ProgramSelector.

    Zwykle nie ma potrzeby pobierania częstotliwości FM dla wpisu na karcie bieżący program lub lista Ulubionych (ponieważ klient powinien działać na multimediach identyfikatory). Gdyby jednak zaistniała taka potrzeba (na przykład w celach związanych z wyświetlaniem), zawarty w identyfikatorze URI i można go przeanalizować jako ProgramSelector. Nie zalecamy jednak używania identyfikatora URI do wybierania elementów w bieżącym . Więcej informacji: ProgramSelector

    Aby uniknąć problemów z wydajnością lub sposobami tworzenia plików, usługa Media Browser musi obsługiwać podział na strony:

    Uwaga: domyślnie podział na strony jest wdrożony onLoadChildren() wersji bez obsługi opcji.

    Powiązane pozycje ze wszystkich typów list (nieprzetworzone kanały, znalezione programy ulubione) mogą mieć różne identyfikatory mediaId (zależy od aplikacji radiowej; obsługa będą działać inaczej). Identyfikatory URI (w postaci ProgramSelector) różnią się między kanałami nieprzetworzonymi a programami występującymi w większości przypadków (z wyjątkiem FM) bez RDS), ale zasadniczo są takie same w przypadku znalezionych programów i ulubionych (z wyjątkiem np. podczas aktualizowania AF).

    Stosowanie różnych identyfikatorów mediaId dla wpisów z różnych typów list sprawia, możesz podejmować różne działania. Możesz przeglądać zarówno listę Ulubione, listy Wszystkie programy na onSkipToNext, w zależności od folderu wybrano MediaItem (zobacz MediaSession).

    Specjalne działania dostrajania

    Lista programów umożliwia użytkownikom dostrajanie do określonej stacji, ale nie umożliwia użytkownikom ogólne żądania, takie jak „Dostrój do FM”, które mogą spowodować słuchał(a) stacji na paśmie FM.

    Aby umożliwić obsługę takich działań, niektóre katalogi najwyższego poziomu zawierają atrybut FLAG_PLAYABLE ustawiona flaga (wraz z FLAG_BROWSABLE w przypadku folderów).

    Działanie Dostraja do Jak wystawić
    Włącz radio Dowolny kanał radiowy startService(ACTION_PLAY_BROADCASTRADIO)

    LUB,

    playFromMediaId(MediaBrowser.getRoot())
    Włącz radio Dowolny kanał FM Włącz utwór mediaId z pasma FM.

    To, do którego programu chcesz dotrzeć, należy do aplikacji. To jest zazwyczaj osoby, które ostatnio były odtwarzane na kanale z danej listy. Więcej informacji: ACTION_PLAY_BROADCASTRADIO, zobacz Ogólne intencje związane z Google Play.

    Wykrywanie i połączenie z usługą

    PackageManager może bezpośrednio znaleźć usługę Media BrowserService obsługującą transmitowanie radiowe drzewo. Aby to zrobić, zadzwoń pod numer resolveService z intencją ACTION_PLAY_BROADCASTRADIO (zobacz ogólne intencje związane z Google Play) oraz Flaga MATCH_SYSTEM_ONLY. Aby znaleźć wszystkie usługi obsługujące radio (na może być więcej niż jeden; np. oddzielne radio AM/FM i satelitarne), użyj queryIntentServices

    Rozwiązana usługa obsługuje powiązanie android.media.browse.MediaBrowserService również do Twoich intencji. Ta informacja jest weryfikowana przez GTS.

    Aby połączyć się z wybraną usługą Media BrowserService, utwórz MediaBrowser dla danego komponentu usługi i connect. Po nawiązaniu połączenia nick dla MediaSession można uzyskać za pomocą getSessionToken

    Aplikacja Radio może ograniczać pakiety klienta, które mogą łączyć się w onGetRoot wdrożenia ich usług. Aplikacja powinna zezwalać aplikacjom systemowym na łączenie się bez dodawania do białej listy. Szczegółowe informacje o dodawaniu do białej listy znajdziesz tutaj: Zaakceptuj pakiet aplikacji Asystent i podpis.

    Jeśli aplikacja źródłowa (na przykład aplikacja radiowa) jest zainstalowana w bez obsługi takiego źródła, reklamuje się jako obsługę intencję ACTION_PLAY_BROADCASTRADIO, ale jej drzewo Media Browser nie może zawierać tagów związanych z opcjami radiowymi. Dlatego klient chce sprawdzić, czy dany źródło jest dostępne na urządzeniu, musi:

    1. Znajdź usługę radiową (zadzwoń pod resolveService, ACTION_PLAY_BROADCASTRADIO).
    2. Utwórz urządzenie MediaBrowser i połącz się z nim.
    3. Sprawdzaj obecność obiektu MediaItem za pomocą EXTRA_BCRADIO_FOLDER_TYPE dodatkowe.

    Uwaga: w większości przypadków klient musi przeskanować wszystkie drzewa Media Browser umożliwiają wykrycie wszystkich dostępnych źródeł dla danego urządzenia.

    Nazwy opasek

    Lista pasm jest reprezentowana przez zbiór katalogów najwyższego poziomu o typie folderu ustawiono na BCRADIO_FOLDER_TYPE_BAND. MediaItem tego użytkownika to zlokalizowane ciągi znaków reprezentujące nazwy zespołów. W większości przypadków będzie to jak tłumaczenie na angielski, ale klient nie może polegać na tym założeniu.

    Aby zapewnić stabilny mechanizm wyszukiwania określonych pasm, dodano dodatkowy tag do folderów na pasek, EXTRA_BCRADIO_BAND_NAME_EN. To jest niezlokalizowana nazwa pasma i może przyjmować tylko jedną z wcześniej zdefiniowanych wartości:

    • AM
    • FM
    • DAB

    Jeśli opaski nie ma na tej liście, oznacza to, że nie należy ustawiać plakietki. Jeśli jednak opaska jest na liście, musi mieć ustawiony tag. Radio HD nie Wymieć osobne pasma, ponieważ korzystają z tego samego podstawowego medium co AM/FM.

    Ogólne intencje związane z odtwarzaniem

    Każda aplikacja przeznaczona do odtwarzania danego źródła (np. radio czy CD) musi obsługiwać ogólna intencja play umożliwiająca rozpoczęcie odtwarzania niektórych treści, prawdopodobnie od stan nieaktywny (np. po uruchomieniu urządzenia). To, jak aplikacja dobierze treści, ale zwykle jest to ostatnio odtwarzany program radiowy lub utwór na płycie CD. zdefiniowaną intencję dla każdego źródła dźwięku:

    • android.car.intent.action.PLAY_BROADCASTRADIO
    • android.car.intent.action.PLAY_AUDIOCD: CD-DA lub CD-Text
    • android.car.intent.action.PLAY_DATADISC: polubienie dysku danych optycznych CD/DVD, ale nie CD-DA (może to być dysk CD/DVD w trybie mieszanym)
    • android.car.intent.action.PLAY_AUX: bez określenia, które Port AUX
    • android.car.intent.action.PLAY_BLUETOOTH
    • android.car.intent.action.PLAY_USB: bez określenia, które Urządzenie USB
    • android.car.intent.action.PLAY_LOCAL: lokalna pamięć masowa (wbudowana lampa błyskowa)

    Wybraliśmy intencje jako ogólne polecenia w Google Play, ponieważ rozwiązują 2 problemy jednocześnie: ogólne polecenie odtwarzania i odkrywanie usług. Dodatkową korzyścią z takiego zamiaru jest możliwość realizacji takich proste czynności bez otwierania sesji Media Browser.

    Wykrywanie usług jest ważniejszym problemem rozwiązywanym przez te intencji. Procedura wykrywania usług jest prosta i jednoznaczna (zobacz Wykrywanie i połączenie z usługą).

    Aby uprościć implementacje klienckie, istnieje alternatywny sposób Wydanie takiego polecenia Play (które też musi być zaimplementowane przez aplikację radiową): wydając playFromMediaId z identyfikatorem głównym węzła (używanym jako mediaId). Natomiast węzeł główny nie jest przeznaczony do odtwarzania, jego identyfikator główny jest dowolnym ciągiem znaków który może być wykorzystywany jako mediaId. Klienci nie są jednak wymagani żeby zrozumieć ten niuans.

    Selektor programu

    mediaId wystarczy, aby wybrać kanał z MediaBrowserService, zostanie powiązany z sesją i nie będzie spójny między dostawcami. W niektórych przypadkach klient może potrzebować wskaźnika bezwzględnego (np. częstotliwość bezwzględna), aby utrzymać ją między sesjami i urządzeniami.

    W erze cyfrowej audycji radiowej sama częstotliwość nie wystarczy, nastroić konkretną stację. Dlatego użyj usługi ProgramSelector, aby dostroić na kanał analogowy lub cyfrowy. Pole ProgramSelector składa się z 2 części:

    • Identyfikator główny. Niepowtarzalny, niezmienny identyfikator danego radia. stacji, która się nie zmienia, ale może nie wystarczyć, żeby ją nastroić. Przykład: Kod PI RDS, który może być przetłumaczony na znak wywoławczy w Stanach Zjednoczonych.
    • Identyfikatory dodatkowe. Dodatkowe identyfikatory przydatne do dostrajania tej stacji (np. częstotliwości). Mogą to być identyfikatory od innych technologiami radiowymi. Na przykład stacja DAB może mieć opcję zastępczą transmisji analogowej.

    Aby umożliwić zgodność ProgramSelector ze standardem MediaBrowser- lub rozwiązania opartego na MediaSession, zdefiniuj schemat identyfikatora URI, aby go zserializować. Schemat to zdefiniowane w następujący sposób:

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

    W tym przykładzie dodatkową część Identyfikatorów (po znaku zapytania (?)) to opcjonalnie i można je usunąć, by stworzyć stały identyfikator do użycia jako mediaId. Na 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

    Władze (inaczej host) domeny program zapewniają pewne miejsce o uwzględnianiu schematu konwersji w przyszłości. Ciągi znaków typu identyfikatora są dokładnie określone jak ich nazwy w definicji HAL 2.x elementu IdentifierType oraz wartości format jest liczbą dziesiętną lub szesnastkową (z prefiksem 0x).

    Wszystkie identyfikatory danego dostawcy są oznaczone symbolem VENDOR_. . na przykład VENDOR_0 w przypadku tekstu VENDOR_START i VENDOR_1 za VENDOR_START plus 1. Takie identyfikatory URI dotyczą specyficzne dla sprzęt radiowy, na którym zostały wygenerowane, i nie można go przenosić między urządzeniami. przez różnych producentów OEM.

    Te identyfikatory URI muszą być przypisane do każdego elementu MediaItem w ramach opcji najwyższego poziomu foldery. Dodatkowo MediaSession musi obsługiwać zarówno playFromMediaId, i playFromUri. Identyfikator URI jest jednak przeznaczony głównie do komunikacji radiowej. wyodrębnianie metadanych (np. częstotliwości FM) i pamięci trwałej; Brak zagwarantowanie, że identyfikator URI będzie dostępny dla wszystkich elementów multimedialnych (na przykład gdy główny typ identyfikatora nie jest jeszcze obsługiwany przez platformę). Identyfikator mediów zawsze działa. Nie zalecamy korzystania z identyfikatora URI przy wyborze elementów w bieżącej sesji Media Browser. W zamian użyj playFromMediaId. Jednak jest to nie jest opcjonalne w przypadku aplikacji obsługującej udostępnianie, a brakujące identyfikatory URI są zarezerwowane tylko w uzasadnionych przypadkach.

    Początkowy projekt zawierał 1 dwukropek zamiast sekwencji :// po części schematu. pierwszy z nich nie jest jednak obsługiwany przez android.net.Uri w przypadku bezwzględnych hierarchicznych odwołań do identyfikatora URI.

    Inne typy źródeł

    W podobny sposób można też traktować inne źródła dźwięku. Na przykład pomocnicze wejście i odtwarzacz audio CD.

    Pojedyncza aplikacja może korzystać z wielu typów źródeł. W takich przypadkach zaleca się utworzenie osobnego obiektu Media BrowserService dla dla każdego typu źródła. Nawet w konfiguracji z wieloma udostępnianymi źródłami/Media BrowserServices, zdecydowanie zalecamy, aby w ramach pojedynczej sesji MediaSession .

    Płyta audio CD

    Podobnie jak w przypadku Audio CD, aplikacja obsługująca takie dyski udostępnic Media Browser, pojedynczy wpis możliwy do przeglądania (lub więcej, jeśli system zmieniarkę płyt CD), która z kolei zawiera wszystkie utwory z danego dysku CD. Jeśli system nie dysponuje wiedzą o utworach z każdego dysku CD (np. gdy wszystkie dyski są wkładane do wkładu naraz i nie odczytują ich wszystkich), a potem Wartość MediaItem dla całego dysku wynosiłaby tylko PLAYABLE, a nie BROWSABLE plus PLAYABLE. Jeśli w w danym boksie element nie będzie PLAYABLE ani BROWSABLE (ale każdy boks musi być zawsze widoczny w drzewie).

     Struktura drzewa płyt audio
    Rysunek 3. Struktura drzewa płyt audio.

    Te wpisy byłyby oznaczane w sposób podobny do rozpowszechniania folderów radiowych. to: zawierają dodatkowe pola zdefiniowane w interfejsie MediaDescription API:

    • EXTRA_CD_TRACK: za każde MediaItem na karcie Audio CD, Numer utworu od 1.
    • EXTRA_CD_DISK: numer dysku składający się z 1 numeru.

    W przypadku systemu z włączoną obsługą CD-Text i zgodnego dysku użycie MediaItem poziomu najwyższego poziomu muszą zawierać tytuł dysku. Podobnie obiekt MediaItems dla utworów miałby tag tytułu utworu.

    Pomocnicze wejście

    Aplikacja udostępniająca dodatkowe dane wejściowe udostępnia drzewo Media Browser z jednym wpisem (lub więcej, gdy istnieje wiele portów) reprezentującego interfejs AUX w porcie. Odpowiednia sesja MediaSession pobiera mediaId i przejście na to źródło po otrzymaniu żądania playFromMediaId.

    Struktura drzewa AUX
    Rysunek 4. Struktura drzewa AUX.

    Każdy wpis AUX MediaItem będzie miał dodatkowe pole. EXTRA_AUX_PORT_NAME ma niezlokalizowaną nazwę portu bez funkcji AUX do wyrażenia. Na przykład „AUX 1” zostałaby ustawiona na „1”, „AUX z przodu” do „przodu” i „AUX” na pusty ciąg znaków. W innych językach nazwa pozostanie taki sam angielski ciąg. Raczej mało prawdopodobne, jak EXTRA_BCRADIO_BAND_NAME_EN, wartości są zdefiniowane przez OEM i nie są jest ograniczona do wstępnie zdefiniowanej listy.

    Jeśli sprzęt może wykrywać urządzenia podłączone do portu AUX, powinien oznaczyć MediaItem jako PLAYABLE, tylko wtedy, gdy podłączone jest wejście. Sprzęt powinien będą nadal wyliczane (ale nie PLAYABLE), jeśli nic nie było związane z tym portu. Jeśli sprzęt nie ma takiej możliwości, element MediaItem musi zawsze mieć wartość PLAYABLE

    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ć MediaItems najwyższego poziomu pod kątem elementów z atrybutem EXTRA_CD_DISK lub EXTRA_AUX_PORT_NAME dodatkowe pole ustawiony.

    Szczegółowe przykłady

    W poniższych przykładach opisano strukturę drzewa Media Browser w przypadku typów źródeł, które który jest częścią tego projektu.

    Usługa Media BrowserService (uchwyty ACTION_PLAY_BROADCASTRADIO):

    • Stacje (możliwe do przeglądania)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
      • Identyfikator URI BBC One (z możliwością odtworzenia): broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
      • Identyfikator URI ABC 88.1 (z możliwością odtworzenia): broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
      • Identyfikator URI ABC 88.1 HD1 (z możliwością odtworzenia): broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
      • Identyfikator URI ABC 88.1 HD2 (z możliwością odtworzenia): broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
      • 90,5 FM (odtwarzane) – FM bez RDSURI: broadcastradio://program/AMFM_FREQUENCY/90500
      • Identyfikator URI 620:00 (z możliwością odtworzenia): broadcastradio://program/AMFM_FREQUENCY/620
      • Identyfikator URI BBC One (z możliwością odtworzenia): broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
    • Ulubione (możliwe do przeglądania i odtwarzania)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
      • Identyfikator URI BBC One (z możliwością odtworzenia): broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
      • BBC Two (nie można odtworzyć) URI: broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
    • AM (można przeglądać i odtwarzać): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
      • Identyfikator URI 530:00 (z możliwością odtworzenia): broadcastradio://program/AMFM_FREQUENCY/530
      • Identyfikator URI 540:00 (z możliwością odtworzenia): broadcastradio://program/AMFM_FREQUENCY/540
      • Identyfikator URI 550:00 (z możliwością odtworzenia): broadcastradio://program/AMFM_FREQUENCY/550
    • FM (możliwość przeglądania i odtwarzania): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
      • Identyfikator URI 87,7 FM (z możliwością odtwarzania): broadcastradio://program/AMFM_FREQUENCY/87700
      • Identyfikator URI 87,9 FM (z możliwością odtwarzania): broadcastradio://program/AMFM_FREQUENCY/87900
      • Identyfikator URI 88.1 FM (z możliwością odtwarzania): broadcastradio://program/AMFM_FREQUENCY/88100
    • DAB (odtwarzana): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"

    Usługa Audio CD Media BrowserService (uchwyty ACTION_PLAY_AUDIOCD):

    • Dysk 1 (z możliwością odtworzenia) EXTRA_CD_DISK=1
    • Dysk 2 (możliwy do przeglądania i odtwarzania) EXTRA_CD_DISK=2
      • Ścieżka 1 (można odtworzyć) EXTRA_CD_TRACK=1
      • Ścieżka 2 (można odtworzyć) EXTRA_CD_TRACK=2
    • Mój dysk muzyczny (który można przeglądać i odtwarzać) EXTRA_CD_DISK=3
      • Wszystko dla mnie (do gry) EXTRA_CD_TRACK=1
      • Reise, Reise (wersja z grą) EXTRA_CD_TRACK=2
    • Puste miejsce 4 (nie można odtwarzać) EXTRA_CD_DISK=4

    AUX Media BrowserService (obsługa ACTION_PLAY_AUX):

    • Przedni AUX (odtwarzany) EXTRA_AUX_PORT_NAME="front"
    • Tylne AUX (można odtwarzać) EXTRA_AUX_PORT_NAME="rear"