Fluxos de integração

A seleção do VIA ativo é feita por ManageAssistActivity em CarSettings. Esse fluxo é acionado pelo aplicativo PackageInstaller , como parte da seção Aplicativos padrão da tela Configurações.

Aplicativos padrão na tela Configurações

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

O VIA selecionado é exposto ao sistema de duas maneiras:

  1. Como parte do serviço do sistema RolesManager
  2. Pelo VoiceInteractionManagerService através da API interna AssistUtils .

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

Acionamento de hotword

O Android fornece AlwaysOnHotwordDetector como uma abstração sobre o DSP de hardware. Isso fornece uma maneira conveniente de associar um VoiceInteractionService a um modelo de voz para reconhecimento de voz sempre ativo de baixo consumo de energia. Este é o fluxo de interação mais comum e conhecido, onde o usuário solicita interagir com um Aplicativo de Voz (VA) para iniciar uma nova conversa. As sessões de voz iniciadas desta forma são identificadas com SHOW_SOURCE_ASSIST_GESTURE flag .

Acionamento de hotword

Figura 2. Acionamento de hotword

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

Acionamento PTT

Isso se aplica a um pressionamento longo ou curto do botão de hardware. No AAOS, o PTT é gerenciado por CarInputService . Numa implementação padrão, este serviço trata eventos de entrada recebidos através do Veículo HAL e, no caso particular de interação de voz, aplica a seguinte lógica aos principais eventos:

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

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

Acionamento PTT

Figura 3. Acionamento do PTT

Para integrar um botão de controle de voz de hardware ao AAOS, consulte Integração de entrada de chave automotiva .

Acionamento Tap-To-Talk (ou botão de software)

O acionamento da interação por voz a partir da IU do sistema é feito usando AssistUtil . Esta é uma API de sistema oculta que só pode ser usada por aplicativos de sistema agrupados, como a UI do sistema, que permite:

  • Interagindo com VoiceInteractionManagerService para iniciar sessões de controle de voz.
  • Determine qual é o VIA atualmente selecionado.

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

Acionamento Tap-To-Talk

Figura 4. Acionamento Tap-To-Talk

Toque para ler (TTR) do assistente de voz

No Automotivo, as notificações postadas na Central de Notificações identificadas como notificações INBOX ou INBOX_IN_GROUP (por exemplo, mensagens SMS) incluirão um botão de ação Play, que permite ao usuário que as notificações sejam lidas em voz alta pelo VIA selecionado e, opcionalmente, responder por voz .

Notificações

Figura 5. Notificações

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

Inicie o VIA no Car Launcher

Como qualquer outro aplicativo, os VIAs podem incluir uma ou mais atividades do iniciador em seu manifesto. Cabe ao desenvolvedor do aplicativo e ao OEM que aceita pré-instalar esse aplicativo decidir o que essas atividades fariam.

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

DSP e áudio HAL

Certifique-se de revisar as diretrizes atualizadas sobre gravação de áudio simultânea sempre ativa e HAL de áudio em Captura simultânea . O acesso a essas APIs pode ter um impacto significativo no desempenho da detecção de hotwords, conforme explicado em Respondendo a hotwords .

Permissões

Conceda permissões privilegiadas do sistema

Dado que a permissão privilegiada não pode ser concedida pelo usuário, se um VIA precisar de alguma delas, os OEMs deverão pré-carregar seu APK nas imagens do sistema e conceder essas permissões explicitamente em suas compilações. Consulte Solicitando permissões .

Para fazer isso, adicione uma dependência de lista de permissões de privilégios ao seu 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>

Pré-concessões de permissões perigosas

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

Importante. Em todos os casos, apenas o VIA padrão teria essas permissões pré-concedidas. Se o sistema tiver mais de um VIA pré-carregado, o VIA não padrão deverá solicitar permissões explicitamente ao usuário como parte de sua configuração ou durante o primeiro uso.

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

VIAs pré-instalados devem estar nas partições e pastas /product/priv-apps ou /vendor/priv-apps (veja mais sobre partições em Visão geral de partições e Construindo partições de produto ).

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

Costumização

Conforme mencionado em Conceitos específicos do setor automotivo , a consistência e a personalização da UI/UX são mais importantes no setor automotivo do que em qualquer outro formato. Para máxima interoperabilidade, o uso da Biblioteca AAOS Car UI é altamente recomendado. Esta biblioteca inclui componentes e recursos que podem ser integrados em aplicações automotivas projetadas para serem customizadas por OEMs. Dessa forma, um único APK pode ser construído de forma que sua UI possa ser customizada de acordo com o design de cada modelo de carro.