Fluxos de integração

A seleção da VIA ativa é feita por ManageAssistActivity nas configurações do carro. Esse fluxo é acionado pelo app PackageInstaller como parte da seção "Apps padrão" da tela "Configurações".

Apps padrão na tela "Configurações"

Figura 1. Apps padrão na tela "Configurações"

O VIA selecionado é exposto ao sistema de duas maneiras:

  1. Como parte do serviço de sistema RolesManager
  2. Pelo VoiceInteractionManagerService usando a API interna AssistUtils.

Uma lista de VIAs candidatas pode ser obtida usando RolesManager com o nome da função android.app.role.ASSISTANT.

Acionamento por hotword

O Android fornece o AlwaysOnHotwordDetector como uma abstração sobre o DSP de hardware. Essa é uma maneira conveniente de associar um VoiceInteractionService a um modelo de voz para reconhecimento de voz sempre ativado de baixa energia. Esse é o fluxo de interação mais comum e conhecido, em que o usuário pede para interagir com um aplicativo de voz (VA) para iniciar uma nova conversa. As sessões de voz iniciadas dessa forma são identificadas com SHOW_SOURCE_ASSIST_GESTURE flag.

Acionamento por hotword

Figura 2. Acionamento por hotword

Lenda. Os serviços do sistema aparecem em azul claro, e os componentes da VIA, em verde.

Acionamento do PTT

Isso se aplica a um pressionamento longo ou breve do botão de hardware. No AAOS, o PTT é processado pelo CarInputService. Em uma implementação padrão, esse serviço processa eventos de entrada recebidos pelo HAL do veículo e, no caso específico da interação por voz, aplica a seguinte lógica aos eventos principais:

  • Eventos curtos de PTT (KeyEvent.KEYCODE_VOICE_ASSIST) são direcionados para VoiceInteractionManagerService para iniciar uma nova sessão de voz.
  • Eventos longos de PTT são primeiro entregues aos receptores de projeção (por exemplo, Android Auto ou CarPlay), depois aos dispositivos conectados por Bluetooth e, por fim, ao app VIA local.

As sessões iniciadas usando esse fluxo são identificadas com SHOW_SOURCE_PUSH_TO_TALK.

Acionamento do PTT

Figura 3. Acionamento do PTT

Para integrar um botão de controle de voz de hardware ao AAOS, consulte a integração de Entrada de chave automotiva.

Ativação do toque para falar (ou botão de software)

Para acionar a interação por voz na interface do sistema, use AssistUtil. Essa é uma API de sistema oculta que só pode ser usada por apps de sistema agrupados, como a interface do sistema, que permite:

  • Interagir com VoiceInteractionManagerService para iniciar sessões de controle de voz.
  • Determine qual VIA está selecionada no momento.

Para apresentar dinamicamente o app VIA selecionado, a interface do sistema pode usar RoleManager e acompanhar as mudanças no detentor da função para ROLE_ASSISTANT. Um exemplo de como implementar o acionamento do TTT pode ser encontrado no CarSystemUI, AssistantButton.

Acionamento do Toque para falar

Figura 4. Acionamento do Toque para falar

Assistente por voz Tocar para ler (TTR)

No setor automotivo, as notificações postadas na Central de notificações identificadas como notificações INBOX ou INBOX_IN_GROUP (por exemplo, mensagens SMS) incluem um botão de ação "Reproduzir", que permite que o usuário ouça as notificações lidas em voz alta pelo VIA selecionado e, opcionalmente, responda por voz.

Notificações

Figura 5. Notificações

Para mais informações sobre como implementar esse fluxo, consulte Processar comandos de mensagens.

Iniciar a VIA no acesso rápido do carro

Como qualquer outro app, as VIAs podem incluir uma ou mais atividades de inicialização no manifesto. Cabe ao desenvolvedor do app e ao OEM que aceita a pré-instalação decidir o que essas atividades vão fazer.

Importante. No Automotive, todas as atividades, incluindo as do sistema, estão sujeitas a restrições de UX durante a direção. Se a experiência que você quer ativar em um ícone do iniciador precisar estar disponível durante a condução, adicione-a à lista de permissões (se você for um OEM) ou anote a atividade com metadados distractionOptimized. Para mais informações, consulte as diretrizes sobre distração do motorista.

DSP e HAL de áudio

Consulte as diretrizes atualizadas sobre gravação de áudio sempre ativada e simultânea e HAL de áudio em Captura simultânea. O acesso a essas APIs pode ter um impacto significativo na performance da detecção de palavra-chave conforme explicado em Responder a palavras-chave.

Permissões

Conceder permissões privilegiadas do sistema

Como a permissão privilegiada não pode ser concedida pelo usuário, se um VIA precisar de alguma delas, os OEMs precisam pré-carregar o APK nas imagens do sistema e conceder essas permissões explicitamente nos builds. Consulte Solicitar permissões.

Para fazer isso, adicione uma dependência de lista de permissões de privilégios ao projeto:

Android.bp

android_app {
     ...
     required: ["privapp_allowlist_com.example.myvoicecontrol"],
     ...
}

Adicione o arquivo de permissão da lista de permissões de privilégios do sistema à pasta yourdata/etc/car:

vendor/…/data/etc/car/Android.bp

prebuilt_etc {
    name:privapp_allowlist_com.example.myvoicecontrol",
    sub_dir: "permissions",
    src: "com.example.myvoicecontrol.xml",
    filename_from_src: true,
}

vendor/…/data/etc/car/com.example.myvoicecontrol.xml

<?xml version="1.0" encoding="utf-8"?>
<permissions>
    <privapp-permissions package="com.android.car.voicecontrol">
        <permission name="android.permission.MEDIA_CONTENT_CONTROL"/>
    </privapp-permissions>
</permissions>

Concessões prévias de permissões perigosas

Conforme indicado em Solicitar permissões, o VIA exige o consentimento do usuário para acessar determinadas funcionalidades. Algumas dessas permissões são concedidas previamente ao VoiceInteractionService padrão (consulte DefaultPermissionGrantPolicy.java). Para mais informações sobre permissões para gerenciadores padrão, consulte Permissões usadas somente em gerenciadores padrão. Também é possível pré-conceder permissões usando o arquivo de configuração default-permissions.xml. Para detalhes sobre restrições relacionadas à pré-concessão de permissões, consulte a seção 9 do Documento de definição de compatibilidade (CDD) do Android.

Importante. Em todos os casos, apenas a VIA padrão teria essas permissões concedidas previamente. Se o sistema tiver mais de uma VIA pré-carregada, a VIA não padrão precisará pedir permissões explicitamente ao usuário como parte da configuração ou durante o primeiro uso.

Distribuição (pré-instalação e implantação de atualizações)

As VIAs pré-instaladas precisam estar em partições e pastas /product/priv-apps ou /vendor/priv-apps. Saiba mais sobre partições em Visão geral das partições e Criar partições de produtos.

No segundo caso, como a partição do fornecedor pode ser atualizada separadamente do sistema, os apps hospedados aqui não poderão acessar as APIs do sistema @hide. Dependendo da localização dos apps pré-instalados, as atualizações podem ser feitas como uma OTA (consulte Atualizações OTA) ou por atualizações de apps em uma loja de apps.

Personalização

Como mencionado em Conceitos específicos para automóveis, a consistência e a personalização da interface/UX são mais importantes em automóveis do que em qualquer outro formato. Para máxima interoperabilidade, recomendamos o uso da biblioteca Car UI do AAOS. Essa biblioteca inclui componentes e recursos que podem ser integrados a apps automotivos projetados para serem personalizados por OEMs. Assim, um único APK pode ser criado de forma que a interface possa ser personalizada para o design de cada modelo de carro.