Componentes do sistema e fluxos de usuário

O diagrama a seguir ilustra os componentes que interagem com a mídia:

Componentes do sistema

Figura 1. Componentes do sistema

Os elementos desta figura estão descritos na tabela:

Componente Descrição
Tela inicial Representa outras superfícies na interface do carro que mostram e controlam o conteúdo em reprodução no momento mídia. No AOSP, essa é a tela principal mostrada quando o sistema é iniciado. A partir dessa tela, os usuários podem visualizar detalhes do item de mídia que está sendo reproduzido e executar um conjunto limitado de e ações personalizadas (por exemplo, "Reproduzir" e "Pausar").
IU do sistema Fornece funcionalidades que incluem opções globais de navegação de IU, como navegar até Mídia.
Assistentes O Android fornece mecanismos para que diferentes aplicativos de assistente de voz interajam com o sistema. Esses apps podem interagir com fontes de mídia em segundo plano (por exemplo, ao abrir música como resultado de um comando de voz) ou navegue até "Mídia" em primeiro plano (por exemplo, quando um app assistente de voz é instruído a exibir a interface de uma fonte de mídia específica).
Acesso rápido aos apps Todos os apps Android são iniciados no Acesso rápido aos apps, incluindo as fontes de mídia. A mídia pode apresentar o próprio seletor de fonte de mídia, complementando ou substituindo o Acesso rápido aos apps como o ponto de partida para a mídia.
Google Play Store Quando o GAS é usado, é aqui que os usuários localizam e instalam novos aplicativos dispositivo Android. Para mídia, depois que os aplicativos são instalados, os usuários são direcionados à mídia para concluir o processo de login ou começar a interagir com o aplicativo.
Gerenciador de sessão de mídia Serviço do sistema Android que rastreia e controla as sessões de mídia de todas as fontes de mídia. Ela oferece mecanismos para detectar quando uma fonte de mídia se torna a mídia em primeiro plano. fonte. Mídia e todos os outros apps que exibem a fonte de mídia em reprodução (por exemplo, a tela inicial), use o Gerenciador de sessão de mídia para detectar esses eventos e atualizar a interface de acordo. As origens de mídia interagem com o Gerenciador de sessão de mídia por meio do Mídia API Session.
Rádio App especializado para interagir com o hardware de rádio. Pesquisas de rádio estações de rádio, selecionando rapidamente as recém-identificadas e alternando entre bandas de rádio. Os componentes de IU compartilhados por rádio e mídia permitem que o usuário alterne entre os dois. experiências
Driver Disstraction Engine (em inglês) Serviço do sistema Android usado para impor restrições de UX com base no estado de condução do carro. Para o login de fontes de mídia e UX de configurações (em que a tela é controlada diretamente por as fontes de mídia), esse serviço garante que nenhum conteúdo perigoso seja exibido quando o carro está ao dirigir. Os OEMs podem personalizar a definição desses estados e como o sistema reage nessas situações (por exemplo, exibindo uma sobreposição de tela de bloqueio).

Fluxos de usuários

Lançamento de app de música

O processo que inicia a mídia aparece abaixo.

Lançamento de app de música

Figura 2. Lançamento de app de mídia

A mídia precisa ser iniciada usando a seguinte abordagem implícita CAR_INTENT_ACTION_MEDIA_TEMPLATE Essa intent pode ter as seguintes informações como extras:

  • android.car.intent.extra.MEDIA_COMPONENT (opcional). String extra para representar o nome do componente nivelado de um MediaBrowserService no app de mídia ao qual a mídia será conectada. Se não for informado, a guia "Mídia" exibirá o app de mídia selecionado no momento. Essa intent é usada no seguinte pontos de entrada:

    • IU do sistema. Usado para retornar à experiência de mídia ou para iniciar usando pela primeira vez. Nesse caso, a intent acima seria usada sem nenhuma extras para que a mídia exiba o aplicativo de mídia selecionado no momento.

    • Tela inicial, Assistentes e Central de Notificações. Os usuários podem: navegue até "Mídia" para exibir 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úsica Iniciador de aplicativos, a intenção acima inclui o CAR_EXTRA_MEDIA_COMPONENT que contém o app de mídia selecionado. A mídia a designa como aplicativo selecionado e se conecta a ele. Para mais detalhes, consulte a seção abaixo: Integração da tela de início à mídia.

Acesso rápido aos apps com integração de mídia

Os apps de mídia não podem fornecer nenhuma atividade com a anotação Categoria android.intent.category.LAUNCHER. Como resultado, o Acesso rápido aos apps (ou seu equivalente) precisa implementar uma lógica especial para lidar com a integração da origem de mídia:

  • O Acesso rápido aos apps precisa verificar o sistema em busca de pacotes implementados MediaBrowserService.SERVICE_INTERFACE: Para esses pacotes, o Acesso rápido aos apps busca o ícone do serviço similar ao usado para buscar outros atividades.

  • O Acesso rápido aos apps combina esses pacotes com aqueles que implementam android.intent.category.LAUNCHER atividades. Se um app oferece MediaBrowserService e uma atividade de tela de início, o serviço precedência.

    Até o momento, nenhum app de origem 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úsica podem incluir uma atividade de configurações otimizada para o veículo. Essa atividade pode ser usados para implementar fluxos de usuários não abordados pelas APIs de mídia do Android, por exemplo:

  • Login
  • Sair
  • Alternância de contas
  • Mostra a que o usuário está conectado no momento (se houver).
  • Configuração do serviço

Fluxo de login

Figura 3. Fluxo de login

Essa atividade de configurações é declarada pelo app de música 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.

  • Nesse caso, permita que o usuário navegue até a atividade.

  • Se as restrições de UX do carro estiverem em vigor (por exemplo, o carro está em movimento), essa funcionalidade deve pode ser desativada porque a atividade de configurações não é uma interface otimizada para o driver.

Tratamento de erros e login obrigatório

A mídia interage com apps de mídia usando a API Android Media Session. Como parte do API, a mídia recebe um PlaybackState que comunica o estado atual do app de música.

O processo de login começa quando o app de música muda PlaybackState para STATE_ERROR, incluindo um código de erro específico (mais detalhes abaixo). Quando isso acontecer, a mídia exibe a descrição do erro e uma affordance para navegar até uma atividade de login implementados pelo app de música.

Esse mesmo fluxo pode ser usado por aplicativos para sinalizar outras situações de erro (por exemplo, uma erro de conectividade do servidor).

Tratamento de erros

Figura 4. Tratamento de erros

Como parte do tratamento normal de erros de PlaybackState, a mídia precisa verificar a seguinte entrada.

  • PlaybackState código de erro igual a PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED. Isso indica que o app de música exige login para continuar a operação. Outros códigos de erro podem ser recebido, o que indicaria outros tipos de situações de erro.

  • PlaybackState mensagem de erro (definida por apps de música usando o PlaybackStateCompat.Builder#setErrorMessage ) contém um explicação legível por humanos (por exemplo, "Você não fez login"). Essa mensagem deve ser exibida para o e deve otimizar a distração (DO, na sigla em inglês).

  • Opcionalmente, PlaybackState pode incluir os extras a seguir (definidos pela Apps com o PlaybackStateCompat.Builder#setExtras ) com as seguintes chaves.

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL: Defina como uma string que contém a mensagem legível a ser exibida no botão tocado pelo usuário para iniciar o fluxo de login.

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT: Conjunto com um PendingIntent para ser acionada quando o usuário clica no botão mencionado acima. Isso PendingIntent aponta para uma atividade de login personalizada implementada pelo mesmo app de mídia.

  • O estado PlaybackState é igual a STATE_ERROR. Isso indica que nenhuma outra operação é possível até o login ser concluído.