Реализация радиоуправления основана на MediaSession
и MediaBrowse
, которые позволяют приложениям мультимедиа и голосовому помощнику управлять радио. Дополнительную информацию см. в разделе «Создание мультимедийных приложений для автомобилей» на сайте Developer.android.com.
Реализация дерева просмотра медиа предоставляется в библиотеке car-broadcastradio-support в packages/apps/Car/libs
. Эта библиотека также содержит расширения ProgramSelector для преобразования в URI и обратно. Реализациям радио рекомендуется использовать эту библиотеку для построения соответствующего дерева просмотра.
Переключатель источника мультимедиа
Чтобы обеспечить плавный переход между радио и другими приложениями, отображаемыми на мультимедиа, библиотека car-media-common содержит классы, которые следует интегрировать в приложение радио. MediaAppSelectorWidget
можно включить в XML для приложения радио (значок и раскрывающийся список, используемые в справочных приложениях мультимедиа и радио):
<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" />
Этот виджет запускает AppSelectionFragment
, который отображает список источников мультимедиа, на которые можно переключиться. Если требуется пользовательский интерфейс, отличный от предоставленного, вы можете создать собственный виджет для запуска AppSelectionFragment
, когда должен отображаться переключатель.
AppSelectionFragment newFragment = AppSelectionFragment.create(widget, packageName, fullScreen); newFragment.show(mActivity.getSupportFragmentManager(), null);
Пример реализации представлен в эталонной реализации радиоприложения, расположенной в packages/apps/Car/Radio
.
Подробные характеристики управления
Интерфейс MediaSession
(через MediaSession.Callback
) предоставляет механизмы управления воспроизводимой в данный момент радиопрограммой:
-
onPlay
,onStop
. (Включить)отключение звука радио. -
onPause
. Пауза со сдвигом по времени (если поддерживается). -
onPlayFromMediaId
. Воспроизводите любой контент из папки верхнего уровня. Например, «Включи FM» или «Включи радио». -
onPlayFromUri
. Играйте на определенной частоте. Например, «Включи 88,5 FM». -
onSkipToNext
,onSkipToPrevious
. Настройтесь на следующую или предыдущую станцию. -
onSetRating
. Добавить или удалить из избранного.
MediaBrowser предоставляет настраиваемый MediaItem для трех типов каталогов верхнего уровня:
- ( Дополнительно ) Программы (станции). Этот режим обычно используется радиостанциями с двойным тюнером для указания всех доступных настраиваемых радиостанций в местоположении пользователя.
- Избранное. Радиопрограммы добавлены в список «Избранное», некоторые из них могут быть недоступны (вне зоны приема).
- Бандовые каналы. Все физически возможные каналы в текущем регионе (87.9, 88.1, 88.3, 88.5, 88.7, 88.9, 89.1 и так далее). У каждой группы есть отдельный каталог верхнего уровня.
Каждый элемент в каждой из этих папок (AM/FM/Programs) представляет собой MediaItem с URI, который можно использовать с MediaSession для настройки. Каждая папка верхнего уровня (AM/FM/Programs) представляет собой MediaItem с идентификатором mediaId, который можно использовать с MediaSession для запуска воспроизведения и выбор которого осуществляется на усмотрение OEM-производителя. Например, «Воспроизвести FM», «Воспроизвести AM» и «Воспроизвести радио» — это неспецифические радиозапросы, которые используют mediaId для отправки в приложение OEM-радио. Приложение радио должно определить, что воспроизводить, на основе общего запроса и mediaId.
Медиасессия
Поскольку не существует концепции приостановки транслируемого потока, действия «Воспроизведение», «Пауза» и «Стоп» не всегда применимы к радио. В случае радио действие «Стоп» связано с отключением звука, а действие «Воспроизведение» связано с отключением звука.
Некоторые радиотюнеры (или приложения) предоставляют возможность имитировать паузу трансляции, кэшируя контент и затем воспроизводя его позже. В таких случаях используйте onPause
.
Воспроизведение с помощью действий mediaId и URI предназначено для настройки на станцию, полученную из интерфейса MediaBrowser. MediaId — это произвольная строка, предоставляемая приложением радио, чтобы задать уникальное (поэтому заданный идентификатор указывает только на один элемент) и стабильное (поэтому данный элемент имеет один и тот же идентификатор на протяжении всего сеанса) значение, с помощью которого можно идентифицировать данную станцию. . URI будет иметь четко определенную схему. Короче говоря, URI-образная форма ProgramSelector. Хотя это сохраняет атрибут уникальности, он не обязательно должен быть стабильным, хотя он может меняться, когда станция переходит на другую частоту.
По замыслу onPlayFromSearch
не используется. Клиент (дополнительное приложение) несет ответственность за выбор результата поиска в дереве MediaBrowser. Перенесение этой ответственности на радиоприложение увеличит сложность, потребует формальных договоров о том, как должны выглядеть строковые запросы, и приведет к неравномерному взаимодействию пользователей на разных аппаратных платформах.
Примечание. Приложение радио не содержит дополнительной информации, которая была бы полезна для поиска названия станции, не доступной клиенту через интерфейс MediaBrowser.
Переход к следующей или предыдущей станции зависит от текущего контекста:
- Когда приложение настроено на станцию из списка «Избранное», оно может перейти к следующей станции из списка «Избранное».
- Прослушивание станции из списка программ может привести к настройке на следующую доступную станцию, отсортированную по номеру канала.
- Прослушивание произвольного канала может привести к настройке на следующий физический канал, даже при отсутствии широковещательного сигнала.
Приложение радио обрабатывает эти действия.
Обработка ошибок
Действия TransportControls
(Воспроизвести, Остановить и Далее) не предоставляют информацию о том, удалось ли действие или нет. Единственный способ указать на ошибку — установить для состояния MediaSession значение STATE_ERROR
с сообщением об ошибке.
Радиоприложение должно обрабатывать эти действия и либо выполнять их, либо устанавливать состояние ошибки. Если выполнение команды Play не является немедленным, состояние воспроизведения должно быть изменено на STATE_CONNECTING
(в случае прямой настройки) или STATE_SKIPPING_TO_PREVIOUS
или NEXT
во время выполнения команды.
Клиент должен наблюдать за PlaybackState
и проверять, изменила ли сессия текущую программу на ту, что была запрошена, или ввела в состояние ошибки. STATE_CONNECTING
не должно превышать 30 с. Однако прямая настройка на заданную частоту AM/FM должна работать намного быстрее.
Добавляйте и удаляйте избранное
MediaSession имеет поддержку рейтингов, которую можно использовать для управления избранным. onSetRating
, вызываемый с рейтингом типа RATING_HEART
добавляет или удаляет настроенную в данный момент станцию в список избранного или из него.
В отличие от устаревших предустановок, эта модель предполагает неупорядоченный и неограниченный список избранного, когда каждому сохраненному избранному соответствует числовой слот (обычно от 1 до 6). В результате системы на основе предустановок будут несовместимы с операцией onSetRating
.
Ограничением API MediaSession является то, что можно добавить или удалить только станцию, на которую настроена в данный момент. Например, элементы необходимо сначала выбрать, прежде чем их можно будет удалить. Это всего лишь ограничение клиента MediaBrowser, например сопутствующего приложения. Приложение «Радио» аналогичным образом не ограничено. Эта часть является необязательной, если приложение не поддерживает Избранное.
Медиабраузер
Чтобы выразить, какие частоты или названия физических каналов (когда настройка на произвольный канал подходит для данной радиотехнологии) действительны для данного региона, все допустимые каналы (частоты) перечислены для каждого диапазона. В регионе США это составляет 101 канал FM в диапазоне от 87,8 до 108,0 МГц (с интервалом 0,2 МГц) и 117 каналов AM в диапазоне от 530 до 1700 кГц (с интервалом 10 кГц). Поскольку HD-радио использует одно и то же пространство каналов, оно не представлено отдельно.
Список доступных на данный момент радиопрограмм является плоским, поскольку не позволяет использовать такие схемы отображения, как группировка по ансамблю прямого аудиовещания (DAB).
Записи в списке избранного могут быть недоступны для настройки. Например, если данная программа находится вне диапазона. Приложение радио может определить, можно ли заранее настроить эту запись, а может и не определить. В этом случае запись может не быть отмечена как воспроизводимая.
Для идентификации папок верхнего уровня применяется тот же механизм, что и в Bluetooth. То есть пакет Extras объекта MediaDescription
содержит поле, специфичное для тюнера, так же, как Bluetooth с EXTRA_BT_FOLDER_TYPE
. В случае радиовещания это приводит к определению следующих новых полей в общедоступном API:
-
EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE"
. Одно из следующих значений:-
BCRADIO_FOLDER_TYPE_PROGRAMS = 1
. Доступные на данный момент программы. -
BCRADIO_FOLDER_TYPE_FAVORITES = 2
. Избранное. -
BCRADIO_FOLDER_TYPE_BAND = 3
. Все физические каналы для данного диапазона.
Нет необходимости определять какие-либо пользовательские поля метаданных, специфичные для радио, поскольку все соответствующие данные вписываются в существующую схему
MediaBrowser.MediaItem
:- Название программы (RDS PS, имя службы DAB).
MediaDescription.getTitle
. - FM-частота. URI (см. ProgramSelector ) или
MediaDescription.getTitle
(если запись находится в папкеBROADCASTRADIO_FOLDER_TYPE_BAND
). - Радиоспецифичные идентификаторы (RDS PI, DAB SId).
MediaDescription.getMediaUri
анализируется в ProgramSelector.
Как правило, нет необходимости выбирать частоту FM для записи в текущей программе или списке избранного (поскольку клиент должен работать с идентификаторами мультимедиа). Однако, если такая необходимость возникнет (например, для целей отображения), она присутствует в URI и может быть проанализирована с помощью
ProgramSelector
. Тем не менее, не рекомендуется использовать URI для выбора элементов в текущем сеансе. Подробности см. вProgramSelector
.Чтобы избежать проблем с производительностью или связующими, служба MediaBrowser должна поддерживать нумерацию страниц:
-
EXTRA_PAGE
-
EXTRA_PAGE_SIZE
- Дополнительные параметры для
subscribe()
Примечание. По умолчанию нумерация страниц реализована в варианте
onLoadChildren()
без обработки параметров.Связанные записи из всех типов списков (необработанные каналы, найденные программы и избранное) могут иметь разные идентификаторы mediaId (это зависит от приложения радио; в библиотеке поддержки они будут разные). URI (в форме ProgramSelector) различаются между необработанными каналами и найденными программами в большинстве случаев (за исключением FM без RDS), но в основном одинаковы между найденными и избранными программами (за исключением, например, случаев обновления AF).
Наличие разных mediaId для записей из разных типов списков позволяет выполнять над ними разные действия. Вы можете просмотреть список «Избранное» или список «Все программы» в
onSkipToNext
, в зависимости от папки недавно выбранногоMediaItem
(см. MediaSession ).Специальные действия по настройке
Список программ позволяет пользователям настраиваться на определенную станцию, но не позволяет пользователям делать общие запросы, такие как «Настроиться на FM», что может привести к настройке на недавно прослушанную станцию в диапазоне FM.
Для поддержки таких действий в некоторых каталогах верхнего уровня установлен флаг
FLAG_PLAYABLE
(наряду сFLAG_BROWSABLE
для папок).Действие Настраивается на Как выдать Включить радио Любой радиоканал startService(ACTION_PLAY_BROADCASTRADIO)
ИЛИ,
playFromMediaId(MediaBrowser. getRoot() )
Воспроизвести FM Любой FM-канал Воспроизведение с mediaId
FM-диапазона.Выбор программы для настройки зависит от приложения. Обычно это последний настроенный канал из данного списка. Подробности о
ACTION_PLAY_BROADCASTRADIO
см. в разделе «Общие игровые намерения» .Обнаружение и подключение услуги
PackageManager
может напрямую найти MediaBrowserService, обслуживающий дерево радиовещания. Для этогоresolveService
с намерениемACTION_PLAY_BROADCASTRADIO
(см. Общие намерения воспроизведения ) и флагомMATCH_SYSTEM_ONLY
. Чтобы найти все службы, обслуживающие радио (их может быть несколько; например, отдельные AM/FM и спутниковые), используйтеqueryIntentServices
.Разрешенная служба также обрабатывает намерение привязки
android.media.browse.MediaBrowserService
. Это подтверждено GTS.Чтобы подключиться к выбранному MediaBrowserService, создайте экземпляр
MediaBrowser
для данного компонента службы иconnect
. После установления соединения дескриптор MediaSession можно получить с помощьюgetSessionToken
.Приложение Radio может ограничивать клиентские пакеты, которым разрешено подключение в реализации своего сервиса
onGetRoot
. Приложение должно разрешать системным приложениям подключаться без внесения в белый список. Подробную информацию о внесении в белый список см. в разделе Принятие пакета и подписи приложения Assistant .Если приложение для конкретного источника (например, приложение радио) установлено на устройстве без такой поддержки источника, оно все равно будет рекламировать себя как обрабатывающее намерение
ACTION_PLAY_BROADCASTRADIO
, но его дерево MediaBrowser не будет содержать теги, специфичные для радио. Таким образом, клиент, желающий проверить, доступен ли данный источник на устройстве, должен:- Откройте для себя службу радио (
resolveService
дляACTION_PLAY_BROADCASTRADIO
). - Создайте
MediaBrowser
и затем подключитесь к нему. - Определите наличие
MediaItem
с доп.EXTRA_BCRADIO_FOLDER_TYPE
.
Примечание. В большинстве случаев клиент должен сканировать все доступные деревья MediaBrowser, чтобы обнаружить все доступные источники для данного устройства.
Названия групп
Список групп представлен набором каталогов верхнего уровня с тегом типа папки, установленным в
BCRADIO_FOLDER_TYPE_BAND
. Заголовки ихMediaItem
представляют собой локализованные строки, представляющие названия групп. В большинстве случаев это будет то же самое, что и английский перевод, но клиент не может полагаться на это предположение.Чтобы обеспечить стабильный механизм поиска определенных групп, для папок групп добавлен дополнительный тег
EXTRA_BCRADIO_BAND_NAME_EN
. Это нелокализованное имя группы, которое может принимать только одно из следующих предопределенных значений:-
AM
-
FM
-
DAB
Если группы нет в этом списке, тег имени группы устанавливать не следует. Однако если группа есть в списке, для нее должен быть установлен тег. Радио HD не выделяет отдельные диапазоны, поскольку использует ту же среду, что и AM/FM.
Общие цели игры
Каждое приложение, предназначенное для воспроизведения определенного источника (например, радио или компакт-диска), должно обрабатывать общее намерение воспроизведения , чтобы начать воспроизведение некоторого контента, возможно, из неактивного состояния (например, после загрузки). Выбор контента для воспроизведения зависит от приложения, но обычно это недавно воспроизведенная радиопрограмма или трек компакт-диска. Для каждого источника звука определяется отдельное намерение:
-
android.car.intent.action.PLAY_BROADCASTRADIO
-
android.car.intent.action.PLAY_AUDIOCD
: CD-DA или CD-текст -
android.car.intent.action.PLAY_DATADISC
: оптический диск с данными, такой как CD/DVD, но не CD-DA (может быть компакт-диск смешанного режима) -
android.car.intent.action.PLAY_AUX
: без указания порта AUX. -
android.car.intent.action.PLAY_BLUETOOTH
-
android.car.intent.action.PLAY_USB
: без указания какого USB-устройства -
android.car.intent.action.PLAY_LOCAL
: локальное хранилище мультимедиа (встроенная флэш-память)
Интенты были выбраны для использования в качестве команды общего воспроизведения, поскольку они решают сразу две задачи: саму команду общего воспроизведения и обнаружение сервиса. Дополнительным преимуществом такого намерения будет возможность выполнить такое простое действие без открытия сеанса MediaBrowser.
Обнаружение сервисов на самом деле является более важной проблемой, решаемой с помощью этих намерений. Процедура обнаружения службы в этом случае проста и однозначна (см. Обнаружение и подключение службы ).
Чтобы упростить реализацию некоторых клиентов, существует альтернативный способ выдачи такой команды Play (которая также должна быть реализована радиоприложением): выдача
playFromMediaId
с rootId корневого узла (используется как mediaId). Хотя корневой узел не предназначен для воспроизведения, его rootId представляет собой произвольную строку, которую можно использовать как mediaId. Однако клиенты не обязаны понимать этот нюанс.Селектор программ
Хотя
mediaId
достаточно для выбора канала изMediaBrowserService
, он становится привязанным к сеансу и не согласован между поставщиками. В некоторых случаях клиенту может потребоваться абсолютный указатель (например, абсолютная частота), чтобы поддерживать его между сеансами и устройствами.В эпоху цифрового радиовещания одной частоты недостаточно для настройки на конкретную станцию. Поэтому используйте
ProgramSelector
для настройки на аналоговый или цифровой канал.ProgramSelector
состоит из двух частей:- Первичный идентификатор. Уникальный и стабильный идентификатор данной радиостанции, который не меняется, но может оказаться недостаточным для настройки на эту станцию. Например, код RDS PI, который можно преобразовать в позывной в США.
- Вторичные идентификаторы. Дополнительные идентификаторы, полезные для настройки на эту станцию (например, частота), возможно, включая идентификаторы других радиотехнологий. Например, станция DAB может иметь резервный вариант аналогового вещания.
Чтобы включить
ProgramSelector
в решение на основеMediaBrowser
илиMediaSession
, определите схему URI для ее сериализации. Схема определяется следующим образом:broadcastradio://program/<primary ID type>/<primary ID>? <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>
В этом примере часть вторичных идентификаторов (после вопросительного знака (
?
)) является необязательной и может быть удалена, чтобы предоставить стабильный идентификатор для использования в качествеmediaId
. Например:-
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
Авторитетная часть (также известная как хост)
program
предоставляет некоторые возможности для расширения схемы в будущем. Строки типа идентификатора точно указаны как их имена в определенииIdentifierType
HAL 2.x, а формат значения представляет собой десятичное или шестнадцатеричное (с префиксом0x
) число.Все идентификаторы, специфичные для поставщика, представлены префиксом
VENDOR_
. Например,VENDOR_0
дляVENDOR_START
иVENDOR_1
дляVENDOR_START
плюс 1. Такие URI относятся к радиооборудованию, на котором они были созданы, и не могут передаваться между устройствами, изготовленными разными OEM-производителями.Эти URI должны быть назначены каждому MediaItem в радио-папках верхнего уровня. Кроме того, MediaSession должен поддерживать как
playFromMediaId
, так иplayFromUri
. Однако URI в первую очередь предназначен для извлечения радиометаданных (например, частоты FM) и постоянного хранения. Нет никакой гарантии, что URI будет доступен для всех элементов мультимедиа (например, если основной тип идентификатора еще не поддерживается платформой). С другой стороны, Media ID работает всегда. Клиентам не рекомендуется использовать URI для выбора элементов из текущего сеанса MediaBrowser. Вместо этого используйтеplayFromMediaId
. Тем не менее, это не является обязательным для обслуживающего приложения, и отсутствующие URI зарезервированы для вполне обоснованных случаев.В первоначальном проекте вместо последовательности
://
после части схемы использовалось одно двоеточие. Однако первый вариант не поддерживаетсяandroid.net.Uri
для абсолютных иерархических ссылок URI.Другие типы источников
С другими источниками звука можно обращаться аналогичным образом. Например, дополнительный вход и проигрыватель Audio CD.
Одно приложение может обслуживать несколько типов источников. В таких случаях рекомендуется создать отдельный MediaBrowserService для каждого типа источника. Даже в конфигурации с несколькими обслуживаемыми источниками/MediaBrowserServices настоятельно рекомендуется иметь один MediaSession в одном приложении.
Аудио компакт-диск
Аналогично Audio CD в том, что приложение, обслуживающее такие диски, предоставляет MediaBrowser одну доступную для просмотра запись (или несколько, если в системе есть CD-чейнджер), которая, в свою очередь, будет содержать все дорожки данного компакт-диска. Если у системы нет знаний о треках на каждом компакт-диске (например, когда все диски вставлены в картридж сразу и она не читает их все), то MediaItem для всего диска будет просто
PLAYABLE
, а неBROWSABLE
плюсPLAYABLE
. Если в данном слоте нет диска, элемент не будет ниPLAYABLE
, ниBROWSABLE
(но каждый слот всегда должен присутствовать в дереве).Эти записи будут помечены так же, как и папки радиовещания; они будут содержать дополнительные поля, определенные в API MediaDescription:
-
EXTRA_CD_TRACK
: для каждогоMediaItem
на аудио компакт-диске номер дорожки начинается с 1. -
EXTRA_CD_DISK
: номер диска, отсчитываемый от 1.
Для системы с поддержкой CD-Text и совместимого диска MediaItem верхнего уровня будет иметь название диска. Аналогично, MediaItems для треков будет иметь название трека.
Дополнительный вход
Приложение, которое обслуживает вспомогательный ввод, предоставляет дерево MediaBrowser с одной записью (или несколькими, если существует несколько портов), представляющей входной порт AUX. Соответствующий MediaSession принимает свой mediaId и переключается на этот источник после получения запроса
playFromMediaId
.Каждая запись AUX MediaItem будет иметь дополнительное поле
EXTRA_AUX_PORT_NAME
в котором будет указано нелокализованное имя порта без фразы «AUX». Например, для «AUX 1» должно быть установлено значение «1», для «AUX front» — «front», а для «AUX» — пустая строка. В неанглийских локалях тег имени останется той же английской строкой. Вряд ли, как и дляEXTRA_BCRADIO_BAND_NAME_EN
, значения определяются OEM-производителем и не ограничены заранее определенным списком.Если оборудование может обнаружить устройства, подключенные к порту AUX, оно должно пометить MediaItem как
PLAYABLE
только в том случае, если вход подключен. Оборудование все равно должно быть пронумеровано (но неPLAYABLE
), если к этому порту ничего не было подключено. Если оборудование не имеет такой возможности, для MediaItem всегда должно быть установлено значениеPLAYABLE
.Дополнительные поля
Определите следующие поля:
-
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"
Клиенту необходимо просмотреть MediaItems верхнего уровня на наличие элементов, имеющих набор дополнительных полей
EXTRA_CD_DISK
илиEXTRA_AUX_PORT_NAME
.Подробные примеры
Следующие примеры относятся к древовидной структуре MediaBrowser для типов источников, которые являются частью этого проекта.
Радиовещание MediaBrowserService (обрабатывает
ACTION_PLAY_BROADCASTRADIO
):- Станции (доступны для просмотра)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
- BBC One (воспроизводимый) URI:
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
- ABC 88.1 (воспроизводимый) URI:
broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- ABC 88.1 HD1 (воспроизводимый) URI:
broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- ABC 88.1 HD2 (воспроизводимый) URI:
broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
- 90,5 FM (воспроизводимо) - FM без RDSURI:
broadcastradio://program/AMFM_FREQUENCY/90500
- 620 AM (воспроизводимый) URI:
broadcastradio://program/AMFM_FREQUENCY/620
- BBC One (воспроизводимый) URI:
broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
- BBC One (воспроизводимый) URI:
- Избранное (просматриваемое, воспроизводимое)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- BBC One (воспроизводимый) URI:
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- BBC Two (не воспроизводится)URI:
broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- BBC One (воспроизводимый) URI:
- AM (доступно для просмотра, воспроизведения):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
- 530 AM (воспроизводимый) URI:
broadcastradio://program/AMFM_FREQUENCY/530
- 540 AM (воспроизводимый) URI:
broadcastradio://program/AMFM_FREQUENCY/540
- 550 AM (воспроизводимый) URI:
broadcastradio://program/AMFM_FREQUENCY/550
- 530 AM (воспроизводимый) URI:
- FM (доступно для просмотра, воспроизведения):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
- 87.7 FM (воспроизводимый) URI:
broadcastradio://program/AMFM_FREQUENCY/87700
- 87.9 FM (воспроизводимый) URI:
broadcastradio://program/AMFM_FREQUENCY/87900
- 88.1 FM (воспроизводимый) URI:
broadcastradio://program/AMFM_FREQUENCY/88100
- 87.7 FM (воспроизводимый) URI:
- DAB (воспроизводимый):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"
Audio CD MediaBrowserService (обрабатывает
ACTION_PLAY_AUDIOCD
):- Диск 1 (воспроизводимый)
EXTRA_CD_DISK=1
- Диск 2 (доступен для просмотра, воспроизведения)
EXTRA_CD_DISK=2
- Трек 1 (воспроизводимый)
EXTRA_CD_TRACK=1
- Трек 2 (воспроизводимый)
EXTRA_CD_TRACK=2
- Трек 1 (воспроизводимый)
- Мой музыкальный компакт-диск (доступен для просмотра и воспроизведения)
EXTRA_CD_DISK=3
- Все сам (воспроизводимо)
EXTRA_CD_TRACK=1
- Рейзе, Рейзе (играбельно)
EXTRA_CD_TRACK=2
- Все сам (воспроизводимо)
- Пустой слот 4 (не воспроизводится)
EXTRA_CD_DISK=4
AUX MediaBrowserService (обрабатывает
ACTION_PLAY_AUX
):- Передний AUX (воспроизводимый)
EXTRA_AUX_PORT_NAME="front"
- Задний AUX (воспроизводимый)
EXTRA_AUX_PORT_NAME="rear"
-