A implementação de controle de rádio é baseada em MediaSession
e
MediaBrowse
, que permitem que apps de assistente de mídia e voz
controlar o rádio. Para mais informações, consulte
Criar apps de música para carros em developer.android.com.
Uma implementação de árvore de navegação de mídia é fornecida ao conjunto de dados do
biblioteca em packages/apps/Car/libs
. Essa biblioteca também contém extensões de
ProgramSeletor a ser convertido de e para o URI. Recomenda-se que as implementações de rádio
use essa biblioteca para criar a árvore de navegação associada.
Seletor de origem de mídia
Para oferecer uma transição perfeita entre o rádio e outros apps exibidos na mídia,
a biblioteca car-media-common contém classes que precisam ser integradas à rádio
app. MediaAppSelectorWidget
pode ser incluído no XML do app de rádio
(o ícone e o menu suspenso usados nos apps de mídia e rádio de referência):
<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" />
Esse widget inicia a AppSelectionFragment
, que mostra uma
lista das fontes de mídia que podem ser alternadas. Se você quiser uma interface diferente da fornecida,
é possível criar um widget personalizado para iniciar a AppSelectionFragment
quando o
seletor será exibido.
AppSelectionFragment newFragment = AppSelectionFragment.create(widget, packageName, fullScreen); newFragment.show(mActivity.getSupportFragmentManager(), null);
Um exemplo de implementação é fornecido na implementação do app de rádio de referência.
localizado em packages/apps/Car/Radio
.
Especificações de controle detalhadas
O MediaSession
(através de MediaSession.Callback
)
interface fornece mecanismos de controle para o programa de rádio em reprodução:
onPlay
,onStop
. (Ative) o som da reprodução de rádio.onPause
: Pausa com horário definido (se compatível).onPlayFromMediaId
: Reproduza qualquer conteúdo de uma pasta de nível superior. Por exemplo, "Tocar FM" ou "Tocar rádio".onPlayFromUri
: Tocar uma frequência específica. Por exemplo, "Tocar FM 88.5".onSkipToNext
,onSkipToPrevious
. Ajustar para próximo ou anterior estaçãoonSetRating
: adicionar ou remover dos favoritos;
O MediaBrowser expõe um objeto ajustável MediaItem em três tipos de diretórios de nível superior:
- (Opcional) Programas (estações). Esse modo normalmente é usado por rádios com sintonizador duplo para indicar todas as estações de rádio ajustáveis disponíveis no local do usuário.
- Favoritos. Programas de rádio adicionados à lista de favoritos, alguns podem ser indisponível (fora do alcance da recepção).
- Canais de banda. Todos os canais fisicamente possíveis na região atual (87,9, 88,1, 88,3, 88,5, 88,7, 88,9, 89,1 e assim por diante). Cada faixa tem um diretório de nível superior separado.
Cada elemento em cada uma dessas pastas (AM/FM/Programas) é um MediaItem com um URI que pode ser usado e o MediaSession a serem ajustados. Cada pasta de nível superior (AM/FM/Programas) é um MediaItem com um mediaId que pode ser usado com o MediaSession para acionar a reprodução e fica a critério do OEM. Para por exemplo, "Tocar FM", "Tocar AM" e "Tocar rádio" são consultas de rádio não específicas que usam uma mediaId a ser enviado ao app de rádio do OEM. Cabe ao app de rádio determinar o que reproduzir do uma solicitação genérica e o mediaId.
MediaSession
Como não existe o conceito de pausar um stream de transmissão, as ações Reproduzir, Pausar e Parar nem sempre se aplicam ao rádio. Com o rádio, a ação "Parar" está associada ao som do stream. enquanto o recurso Reproduzir está associado à remoção da desativação do som.
Alguns sintonizadores (ou aplicativos) de rádio oferecem a capacidade de simular uma pausa no stream de uma transmissão
armazenando o conteúdo em cache
e reproduzindo-o mais tarde. Nesses casos, use onPause
.
A reprodução a partir de ações de mediaId e URI serve para sintonizar uma estação buscada na interface MediaBrowser. mediaId é uma string arbitrária fornecidos pelo app de rádio para impor um atributo exclusivo (para que um determinado ID aponte para apenas um item) e estável (de forma que um determinado item tenha o mesmo ID em toda a sessão) com o qual para identificar uma determinada estação. O URI terá um esquema bem definido. Em resumo, um URI de ProgramSeletor. Embora isso preserve o atributo de uniquidade, ele não precisa estável, embora possa mudar quando a estação passa para uma frequência diferente.
Por padrão, onPlayFromSearch
não é usado. É responsabilidade do cliente
(aplicativo complementar) para selecionar um resultado da pesquisa na árvore do MediaBrowser. Transporte
que a responsabilidade com o app de rádio aumentaria a complexidade e exigiria contratos formais sobre como
consultas de string devem aparecer e resultar em uma experiência do usuário desigual em diferentes hardwares
plataformas.
Observação: o app de rádio não tem informações úteis para buscar um nome de estação não exposto ao cliente por meio da interface MediaBrowser.
Pular para a estação seguinte ou anterior depende do contexto atual:
- Quando um app é sintonizado em uma estação na lista "Favoritos", o app pode passar para a próxima estação a partir da lista de favoritos.
- Ouvir uma estação na lista "Programa" pode resultar na sintonização da próxima estação estação disponível, classificada de acordo com o número do canal.
- Ouvir um canal arbitrário pode resultar no ajuste do próximo canal físico, mesmo sem sinal de transmissão.
O app de rádio processa essas ações.
Tratamento de erros
TransportControls
(Reproduzir, Parar e Próximo) não informa se a ação
ter sucesso ou não. A única maneira de indicar um erro é definir o MediaSession
estado para
STATE_ERROR
com uma mensagem de erro.
O app de rádio precisa processar essas ações e executá-las ou definir um estado de erro.
Se a execução do comando de reprodução não for imediata, o estado da reprodução deverá ser alterado para
STATE_CONNECTING
(no caso de ajuste direto) ou
STATE_SKIPPING_TO_PREVIOUS
ou
NEXT
enquanto o comando está sendo executado.
O cliente precisa assistir ao
PlaybackState
e verificar se a sessão mudou o programa atual para o que foi solicitado ou entrou no
estado de erro. STATE_CONNECTING
não pode exceder 30 segundos. No entanto, a sintonização direta de um determinado
A frequência de AM/FM deve ter um desempenho muito mais rápido.
Adicionar e remover favoritos
O MediaSession tem suporte de classificação, que pode ser usado para controlar favoritos. onSetRating
chamado com uma classificação do tipo
RATING_HEART
adiciona ou remove a estação atualmente sintonizada na lista Favoritos.
Ao contrário das predefinições legadas, esse modelo pressupõe uma opção de Favoritos ilimitados e não ordenados
lista, quando cada favorito salvo foi alocado para um slot numérico (normalmente de 1 a 6).
Como resultado, os sistemas baseados em predefinição seriam incompatíveis com onSetRating
operação
A limitação da API MediaSession é que apenas a estação atualmente sintonizada podem ser adicionadas ou removidas. Por exemplo, os itens devem ser selecionados antes de podem ser removidas. Essa é apenas uma limitação do cliente MediaBrowser, como uma app complementar. O app de rádio não tem restrições semelhantes. Esta parte é opcional quando um app não é compatível com a seção "Favoritos".
MediaBrowser
Para expressar quais frequências ou nomes de canais físicos (ao sintonizar para um canal arbitrário seja adequado para determinada tecnologia de rádio) são válidos para em determinada região, todos os canais válidos (frequências) são listados para cada faixa. Na região dos EUA, isso equivale a 101 canais FM no intervalo de 87,8 a Intervalo de 108,0 MHz (usando espaçamento de 0,2 MHz) e canais de 117 AM no intervalo de 530 a 1.700 kHz (usando espaçamento de 10 kHz). Como a rádio HD usa o mesmo espaço de canal, ele não é apresentado separadamente.
A lista de programas de rádio disponíveis no momento é fixa, porque isso não permite exibir esquemas, como o agrupamento por conjunto de transmissão de áudio direta (DAB, na sigla em inglês).
As entradas na lista de Favoritos podem não ser ajustáveis. Por exemplo, se um determinado de rede está fora do intervalo. O aplicativo de rádio pode ou não detectar se a entrada podem ser ajustados antecipadamente. Nesse caso, talvez a entrada não seja marcada como jogável.
Para identificar pastas de nível superior, é aplicado o mesmo mecanismo usado pelo Bluetooth.
Ou seja, um pacote de extras do
MediaDescription
contém um campo específico do sintonizador, assim como o Bluetooth faz com
EXTRA_BT_FOLDER_TYPE
.
No caso do rádio de transmissão, isso leva à definição dos seguintes novos campos na
API pública:
EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE"
: Um dos seguintes valores:BCRADIO_FOLDER_TYPE_PROGRAMS = 1
: Programas disponíveis no momento.BCRADIO_FOLDER_TYPE_FAVORITES = 2
: Favoritos.BCRADIO_FOLDER_TYPE_BAND = 3
: Todos os canais físicos de uma determinada banda.
Não é necessário definir campos de metadados personalizados específicos para rádio, já que todos os dados relevantes se encaixam no esquema
MediaBrowser.MediaItem
existente:- Nome do programa (RDS PS, nome do serviço DAB).
MediaDescription.getTitle
. - Frequência de FM. URI (consulte
ProgramSeletor) ou
MediaDescription.getTitle
(se uma entrada estiver na pastaBROADCASTRADIO_FOLDER_TYPE_BAND
). - Identificadores específicos de rádio (RDS PI, DAB SId).
MediaDescription.getMediaUri
analisado para ProgramSelector.
Normalmente, não há necessidade de buscar a frequência FM para uma entrada no programa atual ou lista de Favoritos (pois o cliente deve operar em mídia ). No entanto, caso surja tal necessidade (por exemplo, para fins de exibição), presentes no URI e podem ser analisados para
ProgramSelector
. Por isso, não é recomendado usar o URI para selecionar itens no diretório atual sessão. Para mais detalhes, consulteProgramSelector
:Para evitar problemas de desempenho ou relacionados ao binder, o serviço MediaBrowser precisa oferecer suporte à paginação:
EXTRA_PAGE
EXTRA_PAGE_SIZE
- Parâmetros extras para
subscribe()
Observação:a paginação é implementada por padrão na
onLoadChildren()
sem processamento de opções.Entradas relacionadas de todos os tipos de listas (canais brutos, programas encontrados e favoritos) podem ter mediaIds diferentes (depende do app de rádio; suporte biblioteca os terá diferentes). Os URIs (no formato ProgramSeletor) diferem entre canais brutos e programas encontrados na maioria dos casos (exceto para FM sem RDS), mas são praticamente os mesmos entre os programas encontrados e os favoritos (exceto por exemplo, quando a PD foi atualizada).
Ter diferentes mediaIds para entradas de diferentes tipos de listas facilita será possível realizar ações diferentes neles. Você pode percorrer a lista de Favoritos ou a lista Todos os programas em
onSkipToNext
, dependendo da pasta do arquivoMediaItem
selecionados (consulte MediaSession).Ações especiais de ajuste
A lista de programas permite que os usuários sintonizem uma estação específica, mas não permite que os usuários fazer solicitações gerais, como "Sintonizar para FM", o que pode resultar na sintonização de um ouvi a estação na banda FM.
Para suportar essas ações, alguns diretórios de nível superior têm a propriedade
FLAG_PLAYABLE
flag definida (junto comFLAG_BROWSABLE
para pastas).Ação Sintoniza em Como emitir Ouvir o rádio Qualquer canal de rádio startService(ACTION_PLAY_BROADCASTRADIO)
OU
playFromMediaId(MediaBrowser.getRoot())
Tocar FM Qualquer canal de FM Tocar no mediaId
da banda FM.A determinação de qual programa ajustar depende do app. Isso é normalmente é o canal sintonizado mais recentemente da lista fornecida. Para detalhes sobre
ACTION_PLAY_BROADCASTRADIO
, consulte Intents gerais de reprodução:Descoberta e conexão de serviço
PackageManager
pode encontrar diretamente o MediaBrowserService que veicula rádio de transmissão árvore. Para fazer isso, chameresolveService
. com a intentACTION_PLAY_BROADCASTRADIO
(consulte Intents gerais do Google Play) eMATCH_SYSTEM_ONLY
. Para encontrar todos os serviços de rádio pode haver mais de um; por exemplo, separe AM/FM e satélite), usequeryIntentServices
:O serviço resolvido processa a vinculação
android.media.browse.MediaBrowserService
. a intenção de compra. Isso foi verificado com o GTS.Para se conectar ao MediaBrowserService selecionado, criar instância
MediaBrowser
para um determinado componente de serviço econnect
. Depois de estabelecer a conexão, um identificador para a MediaSession pode ser obtido viagetSessionToken
:O app Radio pode restringir pacotes clientes com permissão para se conectar em uma
onGetRoot
implementação do serviço. O app precisa permitir que apps do sistema se conectem sem a lista de permissões. Para detalhes sobre a lista de permissões, consulte Aceite o pacote e a assinatura do app do Assistente.Se o app específico da fonte (por exemplo, um app de rádio) estiver instalado em um dispositivo sem esse suporte de origem, ele ainda se anunciaria como processando o
ACTION_PLAY_BROADCASTRADIO
, mas a árvore MediaBrowser não contêm tags específicas para rádio. Assim, um cliente disposto a verificar se um determinado fonte está disponível em um dispositivo, deve:- Descubra o serviço de rádio (chame
resolveService
paraACTION_PLAY_BROADCASTRADIO
). - Crie
MediaBrowser
e conecte-se a ele. - Determinar a presença de
MediaItem
comEXTRA_BCRADIO_FOLDER_TYPE
extra.
Observação: na maioria dos casos, o cliente precisa verificar todos árvores do MediaBrowser disponíveis para detectar todas as fontes disponíveis para um determinado dispositivo.
Nomes de banda
A lista de bandas é representada por um conjunto de diretórios de nível superior com um tipo de pasta tag definida como
BCRADIO_FOLDER_TYPE_BAND
. DoMediaItem
da criança títulos são strings localizadas que representam os nomes das bandas. Na maioria dos casos, será é igual à tradução para o inglês, mas o cliente não pode depender dessa suposição.Para fornecer um mecanismo estável para procurar certas pulseiras, um uma tag extra foi adicionada para as pastas da pulseira
EXTRA_BCRADIO_BAND_NAME_EN
. Isso é um nome não localizado da banda e pode usar apenas um destes valores predefinidos:AM
FM
DAB
Se a pulseira não estiver na lista, a tag com o nome dela não deverá ser colocada. No entanto, se a banda estiver na lista, ela precisará ter uma tag definida. O rádio HD não enumerar bandas separadas, já que usa o mesmo meio subjacente que AM/FM.
Intents gerais de reprodução
Cada app dedicado a reproduzir determinada fonte (como rádio ou CD) precisa processar um intenção geral play de começar a reproduzir conteúdo, possivelmente de inativo (por exemplo, após a inicialização). Cabe ao aplicativo escolher como selecionar o conteúdo ser reproduzido, mas normalmente é o programa de rádio ou a faixa de CD tocado recentemente. intent definida para cada fonte de áudio:
android.car.intent.action.PLAY_BROADCASTRADIO
android.car.intent.action.PLAY_AUDIOCD
: CD-DA ou CD-Textandroid.car.intent.action.PLAY_DATADISC
: disco de dados ópticos como CD/DVD, mas não CD-DA (pode ser um CD de modo misto)android.car.intent.action.PLAY_AUX
: sem especificar qual Porta auxiliarandroid.car.intent.action.PLAY_BLUETOOTH
android.car.intent.action.PLAY_USB
: sem especificar qual Dispositivo USBandroid.car.intent.action.PLAY_LOCAL
: armazenamento em mídia local (Flash integrado)
As intents foram escolhidas para serem usadas no comando geral de reprodução, porque resolvem dois problemas ao mesmo tempo: o próprio comando geral de reprodução e a descoberta de serviços. O benefício adicional de ter tal intenção seria a possibilidade de executar tal intenção ação simples sem abrir a sessão do MediaBrowser.
A descoberta de serviços é, na verdade, o problema mais importante resolvido com intents. Dessa forma, o procedimento de descoberta de serviços é fácil e inequívoco (consulte descoberta e conexão de serviço).
Para facilitar algumas implementações de cliente, há uma forma alternativa de emitindo esse comando Play (que também precisa ser implementado pelo app de rádio): emitindo
playFromMediaId
com o rootId do nó raiz (usado como mediaId). Enquanto o nó raiz não foi projetado para ser reproduzido, seu rootId é uma string arbitrária que pode ser consumível como mediaId. No entanto, os clientes não precisam para entender essa nuance.Seletor de programa
Embora
mediaId
seja suficiente para selecionar um canal daMediaBrowserService
, ele fica vinculado a uma sessão e não é consistente. entre provedores. Em alguns casos, o cliente pode precisar de um ponteiro absoluto (como um frequência absoluta) para mantê-lo entre sessões e dispositivos.Na era das transmissões de rádio digital, uma frequência nua não é suficiente para sintonizar uma estação específica. Portanto, use
ProgramSelector
para ajustar para um canal analógico ou digital.ProgramSelector
consiste em duas partes:- Identificador principal. Um identificador exclusivo e estável para um determinado rádio estação que não muda, mas que pode não ser suficiente para sintonizar essa estação. Por exemplo: Código PI do RDS, que pode ser traduzido para o indicativo de chamada nos EUA.
- Identificadores secundários. Outros identificadores úteis para ajustes para essa estação (por exemplo, frequência), possivelmente incluindo identificadores de outros de rádio. Por exemplo, uma estação DAB pode ter um substituto de transmissão analógico.
Para permitir que o
ProgramSelector
se encaixe nos camposMediaBrowser
ou baseada emMediaSession
, defina um esquema de URI para serializá-lo. O esquema é definido da seguinte maneira:broadcastradio://program/<primary ID type>/<primary ID>? <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>
Neste exemplo, a parte dos identificadores secundários (após o ponto de interrogação (
?
)) é opcional e pode ser removido para fornecer um identificador estável para uso comomediaId
. Exemplo: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
A parte de autoridade (host, também conhecida como host) do
program
, fornece espaço para no futuro. As strings do tipo de identificador são especificadas com precisão como nomes na definição deIdentifierType
da HAL 2.x e o valor formato é um número decimal ou hexadecimal (com prefixo0x
).Todos os identificadores específicos do fornecedor são representados pelo
VENDOR_
. . Por exemplo,VENDOR_0
paraVENDOR_START
eVENDOR_1
porVENDOR_START
mais 1. Esses URIs são específicos do hardware de rádio em que foram gerados e não podem ser transferidos entre dispositivos feitas por diferentes OEMs.Esses URIs devem ser atribuídos a cada MediaItem no botão de opção de nível superior do Google Cloud. Além disso, a MediaSession precisa oferecer suporte a
playFromMediaId
eplayFromUri
. No entanto, o URI é destinado principalmente a rádios Extração de metadados (como frequência FM) e armazenamento permanente. Não há garantir que o URI esteja disponível para todos os itens de mídia (por exemplo, quando o O tipo de ID ainda não é compatível com o framework). Por outro lado, o ID de mídia sempre funciona. Não é recomendado que os clientes usem URI para selecionar itens do sessão atual do MediaBrowser. Em vez disso, useplayFromMediaId
. Dito isso, é não é opcional para o aplicativo de exibição, e os URIs ausentes são reservados para casos justificados.O design inicial usou dois-pontos em vez da sequência
://
. após a parte do esquema. No entanto, o primeiro não é compatível comandroid.net.Uri
para referências de URI hierárquicas absolutas.Outros tipos de origem
Outras fontes de áudio podem ser tratadas da mesma forma. Por exemplo, a entrada auxiliar e o CD player de áudio.
Um único app pode atender a vários tipos de fontes. Nesses casos, é recomendável criar um MediaBrowserService separado para cada tipo de origem. Mesmo em uma configuração com várias fontes exibidas/MediaBrowserServices, é altamente recomendado ter apenas uma MediaSession em um único app.
CD de áudio
Semelhante ao CD de áudio, porque o aplicativo que fornece esses discos Exponha o MediaBrowser com uma única entrada navegável (ou mais, se o sistema tiver uma CD, que por sua vez conteria todas as faixas de um determinado CD. Se o sistema não tem conhecimento sobre os rastros de cada CD (por exemplo, quando todos os discos são inseridos em um cartucho de uma vez e ele não lê todos eles), O MediaItem de todo o disco seria apenas
PLAYABLE
, e nãoBROWSABLE
maisPLAYABLE
. Se não houver disco em um em um determinado espaço, o item não seriaPLAYABLE
nemBROWSABLE
mas cada slot deve sempre estar presente na árvore.Essas entradas seriam marcadas de maneira semelhante a transmitir pastas de rádio. are; elas conteriam campos extras adicionais definidos na API MediaDescription:
EXTRA_CD_TRACK
: para cadaMediaItem
em CD de áudio, Número de faixa com base em 1.EXTRA_CD_DISK
: número de disco baseado em 1.
Para um sistema habilitado para CD-Text e discos compatíveis, o MediaItem de nível superior tem um título do disco. Da mesma forma, os MediaItems para faixas, teriam um título da faixa.
Entrada auxiliar
O aplicativo que fornece a entrada auxiliar expõe uma árvore MediaBrowser com uma única entrada (ou mais, quando há várias portas) representando a entrada auxiliar. A respectiva MediaSession realiza mediaId e alterna para essa origem depois de receber a solicitação
playFromMediaId
.Cada entrada AUX MediaItem teria um campo extra
EXTRA_AUX_PORT_NAME
definido como o nome não localizado da porta. sem o "AUX" frase Por exemplo, "AUX 1" será definida como "1", "AUX frente" para "frente" e "AUX" como uma string vazia. Em localidades diferentes do inglês, o nome permanece a mesma string em inglês. Improvável comoEXTRA_BCRADIO_BAND_NAME_EN
, os valores são definidos pelo OEM e não restritos a uma lista predefinida.Se o hardware puder detectar dispositivos conectados à porta AUX, ele deverá marcar o MediaItem como
PLAYABLE
, somente se a entrada estiver conectada. O hardware precisa ainda pode ser enumerado (mas nãoPLAYABLE
) se nada estiver conectado a esse porta Se o hardware não possui tal capacidade, o MediaItem deve sempre ser definido comoPLAYABLE
:Campos extras
Defina os seguintes campos:
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"
O cliente precisa analisar os MediaItems de nível superior em busca de elementos que têm o
EXTRA_CD_DISK
ouEXTRA_AUX_PORT_NAME
campo extra definido.Exemplos detalhados
Os exemplos a seguir abordam a estrutura de árvore do MediaBrowser para tipos de origem que são parte desse design.
Rádio de transmissão MediaBrowserService (gerencia
ACTION_PLAY_BROADCASTRADIO
):- Estações (navegáveis)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
- URI da BBC One (jogável):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
- URI ABC 88.1 (jogável):
broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- URI ABC 88.1 HD1 (jogável):
broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- URI ABC 88.1 HD2 (jogável):
broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
- 90.5 FM (jogável) - FM sem RDSURI:
broadcastradio://program/AMFM_FREQUENCY/90500
- URI 620 AM (jogável):
broadcastradio://program/AMFM_FREQUENCY/620
- URI da BBC One (jogável):
broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
- URI da BBC One (jogável):
- Favoritos (navegáveis, jogáveis)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- URI da BBC One (jogável):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- URI da BBC Two (não reproduzível):
broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- URI da BBC One (jogável):
- AM (navegável, reproduzível):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
- 530 AM (jogável) URI:
broadcastradio://program/AMFM_FREQUENCY/530
- 540 AM (jogável) URI:
broadcastradio://program/AMFM_FREQUENCY/540
- 550 AM (jogável) URI:
broadcastradio://program/AMFM_FREQUENCY/550
- 530 AM (jogável) URI:
- FM (navegável e reproduzível):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
- URI 87.7 FM (reproduzível):
broadcastradio://program/AMFM_FREQUENCY/87700
- URI 87.9 FM (reproduzível):
broadcastradio://program/AMFM_FREQUENCY/87900
- URI 88.1 FM (reproduzível):
broadcastradio://program/AMFM_FREQUENCY/88100
- URI 87.7 FM (reproduzível):
- DAB (jogável):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"
CD de áudio MediaBrowserService (gerencia
ACTION_PLAY_AUDIOCD
):- Disco 1 (jogável)
EXTRA_CD_DISK=1
- Disco 2 (navegável, reproduzível)
EXTRA_CD_DISK=2
- Faixa 1 (jogável)
EXTRA_CD_TRACK=1
- Faixa 2 (jogável)
EXTRA_CD_TRACK=2
- Faixa 1 (jogável)
- CD da minha música (navegável e reproduzível)
EXTRA_CD_DISK=3
- All By Myself (jogável)
EXTRA_CD_TRACK=1
- Reise, Reise (jogável)
EXTRA_CD_TRACK=2
- All By Myself (jogável)
- Slot 4 vazio (não reproduzível)
EXTRA_CD_DISK=4
AUX MediaBrowserService (gerencia
ACTION_PLAY_AUX
):- Frente auxiliar (jogável)
EXTRA_AUX_PORT_NAME="front"
- AUX traseira (jogável)
EXTRA_AUX_PORT_NAME="rear"