Os componentes que interagem com a mídia estão descritos na tabela:
| Componente | Descrição |
|---|---|
| Tela inicial | Representa outras plataformas na interface do carro que mostram e controlam a mídia em reprodução. No AOSP, essa é a tela principal exibida quando o sistema é iniciado. Nessa tela, os usuários podem conferir detalhes do item de mídia em reprodução e executar um conjunto limitado de ações padrão e personalizadas (por exemplo, "Reproduzir" e "Pausar"). |
| Interface do sistema | Oferece funcionalidades que incluem opções de navegação global na interface, como navegar até Mídia. |
| Assistentes | O Android oferece mecanismos para que diferentes apps de assistente de voz interajam com o sistema. Esses apps podem interagir com fontes de mídia em segundo plano (por exemplo, tocar uma música como resultado de um comando de voz) ou navegar até a mídia em primeiro plano (por exemplo, quando um app assistente por voz recebe instruções para mostrar a interface de uma fonte de mídia específica). |
| Acesso rápido aos apps | Todos os apps Android começam no Acesso rápido aos apps, incluindo as fontes de mídia. A mídia pode apresentar seu próprio seletor de origem de mídia, complementando ou substituindo o iniciador de apps como o ponto de partida para mídia. |
| Google Play Store | É aqui que os usuários localizam e instalam novos apps em um dispositivo Android quando o GAS está sendo usado. Para mídia, depois que os apps são instalados, os usuários são direcionados para a mídia para concluir o processo de login ou começar a interagir com o app. |
| Gerenciador de sessões de mídia | Serviço do sistema Android que rastreia e controla sessões de mídia de todas as fontes de mídia. Ele fornece mecanismos para detectar quando uma fonte de mídia se torna a fonte de mídia em primeiro plano. A mídia e todos os outros apps que mostram a fonte de mídia em reprodução no momento (por exemplo, a tela inicial) usam o Media Session Manager para detectar esses eventos e atualizar a interface de acordo. As fontes de mídia interagem com o Media Session Manager usando a API Media Session. |
| Rádio | App especializado para interagir com o hardware de rádio. O rádio pesquisa estações de rádio, seleciona rapidamente as estações identificadas recentemente e alterna entre as faixas de rádio. Os componentes de UI compartilhados pelo rádio e pela mídia permitem que o usuário alterne entre as duas experiências. |
| Mecanismo de distração do motorista | Serviço do sistema Android usado para impor restrições de UX com base no estado de direção do carro. Para a experiência do usuário de configurações e login das fontes de mídia (em que a tela é controlada diretamente pelas fontes de mídia), esse serviço garante que nenhum conteúdo não seguro seja mostrado quando o carro estiver em movimento. Os OEMs podem personalizar a definição desses estados e como o sistema reage nessas situações (por exemplo, mostrando uma sobreposição de tela de bloqueio). |
Fluxos de usuário
Inicialização de apps de mídia
A mídia precisa ser iniciada usando o seguinte implícito
CAR_INTENT_ACTION_MEDIA_TEMPLATE.
Essa intent pode ter as seguintes informações como extras:
-
android.car.intent.extra.MEDIA_COMPONENT(opcional). Extra de string para representar o nome do componente simplificado de umMediaBrowserServiceno app de mídia a que a mídia vai se conectar. Se não for fornecido, a mídia vai mostrar o app de mídia selecionado no momento. Essa intent é usada nos seguintes pontos de entrada:-
Interface do sistema. Usado para voltar à experiência de mídia ou para começar a usar pela primeira vez. Nesse caso, a intent acima seria usada sem extras para fazer com que a mídia mostre o app de mídia selecionado no momento.
-
Tela inicial, assistentes e central de notificações. Os usuários podem navegar até "Mídia" para mostrar o app de mídia selecionado no momento. Em todos os casos, a intent implícita sem extras é acionada.
-
Acesso rápido aos apps. Quando os usuários selecionam um app de mídia no iniciador de apps, a intent acima inclui o extra
CAR_EXTRA_MEDIA_COMPONENTque contém o app de mídia selecionado. A mídia designa esse app como o recém- selecionado e se conecta a ele. Para mais detalhes, consulte a seção abaixo, "Integração do iniciador de apps com mídia".
-
Integração do acesso rápido aos apps com a mídia
Os apps de mídia não podem fornecer nenhuma atividade anotada com a categoria
android.intent.category.LAUNCHER. Como resultado, o iniciador de apps (ou o equivalente dele) precisa implementar uma lógica especial para resolver a integração da fonte de mídia:
-
O iniciador de apps precisa verificar o sistema em busca de pacotes que implementam
MediaBrowserService.SERVICE_INTERFACE. Para esses pacotes, o iniciador de apps busca o ícone do serviço de maneira semelhante à usada para buscar outras atividades. -
Em seguida, o App Launcher combina esses pacotes com aqueles que implementam atividades do
android.intent.category.LAUNCHER. Se um app fornecer uma implementação deMediaBrowserServicee uma atividade de tela de início, o serviço terá precedência.No momento da redação deste artigo, nenhum app de fonte de mídia pode fornecer uma atividade de tela de início.
- Um exemplo dessa lógica pode ser encontrado no código do AOSP em
AppLauncherUtils#getAllLauncherApps().
Fluxo de login e opções de configuração
Os apps de mídia podem incluir uma atividade de configurações otimizada para veículos. Essa atividade pode ser usada para implementar fluxos de usuários não abordados pelas APIs de mídia do Android, por exemplo:
- Login
- Sair
- Alternância de contas
- Tela em que o usuário está conectado no momento (se houver)
- Configuração de serviço
Essa atividade de configurações é declarada pelo app de mídia com o seguinte filtro de intent:
<activity android:name=".AppSettingsActivity" android:exported="true android:theme="@style/SettingsActivity" android:label="@string/app_settings_activity_title"> <intent-filter> <action android:name="android.intent.action.APPLICATION_PREFERENCES"/> </intent-filter> </activity>
A mídia precisa implementar a seguinte lógica:
-
Verifique se o app de mídia selecionado no momento inclui uma atividade com o filtro de intent especificado.
-
Se for o caso, permita que o usuário navegue até a atividade.
-
Se as restrições de UX veicular estiverem em vigor (por exemplo, o carro está em movimento), essa ação precisará ser desativada, já que a atividade de configurações não é uma interface otimizada para motoristas.
Tratamento de erros e login obrigatório
A mídia interage com apps de mídia usando a API Android Media Session. Como parte dessa
API, a mídia recebe um
objeto PlaybackState
que comunica o estado atual do app de mídia.
O processo de login começa quando o app de mídia muda
PlaybackState
para
STATE_ERROR,
incluindo um código de erro específico (confira os detalhes abaixo). Quando isso acontece, o Media mostra a descrição do erro e uma opção para navegar até uma atividade de login
implementada pelo app de mídia.
O mesmo fluxo pode ser usado por apps para sinalizar outras situações de erro (por exemplo, um erro de conectividade do servidor).
Como parte do tratamento normal de erros PlaybackState, a mídia precisa verificar a seguinte entrada.
-
PlaybackStatecódigo do erro igual aPlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED. Isso indica que o app de mídia exige login para continuar funcionando. Outros códigos de erro podem ser recebidos, o que indica outros tipos de situações de erro. -
A mensagem de erro
PlaybackState(definida por apps de mídia usando o métodoPlaybackStateCompat.Builder#setErrorMessage) contém uma explicação legível por humanos (por exemplo, "Você não fez login"). Essa mensagem precisa ser mostrada ao usuário e otimizada para evitar distrações ao dirigir (DO). -
Opcionalmente,
PlaybackStatepode incluir os seguintes extras (definidos por apps de mídia com o métodoPlaybackStateCompat.Builder#setExtras) com as seguintes chaves.-
android.media.extras.ERROR_RESOLUTION_ACTION_LABEL. Defina como uma string que contém a mensagem legível que será exibida no botão tocado pelo usuário para iniciar o fluxo de login. -
android.media.extras.ERROR_RESOLUTION_ACTION_INTENT. Defina com umPendingIntentpara ser acionado quando o usuário clicar no botão mencionado acima. EssePendingIntentaponta para uma atividade de login personalizada implementada pelo mesmo app de mídia.
-
-
O estado
PlaybackStateé igual aSTATE_ERROR. Isso indica que nenhuma outra operação é possível até que o login seja concluído.