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 baixa energia. Este é o fluxo de interação mais comum e conhecido, onde o usuário solicita a interação com um Aplicativo de Voz (VA) para iniciar uma nova conversa. As sessões de voz iniciadas dessa maneira 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, os componentes VIA em verde.

Acionamento PTT

Isso se aplica a um pressionamento de botão de hardware longo ou curto. No AAOS, o PTT é tratado pelo CarInputService . Em uma implementação padrão, esse serviço trata os eventos de entrada recebidos por meio da HAL do veículo e, no caso específico 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.
  • Os eventos PTT longos são entregues primeiro aos receptores de projeção (por exemplo, Android Auto ou CarPlay), depois aos dispositivos conectados por Bluetooth e, finalmente, ao 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 de voz da interface do usuário do sistema é feito usando o AssistUtil . Esta é uma API de sistema oculta que só pode ser usada por aplicativos de sistema agrupados, como a interface do usuário 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 interface do usuário 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 de toque para falar

Figura 4. Acionamento Tap-To-Talk

Assistente de voz tocar para ler (TTR)

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 ter as notificações lidas em voz alta pela VIA selecionada e, opcionalmente, responder por voz .

Notificações

Figura 5. Notificações

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

Iniciar VIA a partir do 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 aceitar a pré-instalação desse aplicativo para decidir o que essas atividades fariam.

Importante. No setor automotivo, todas as atividades, incluindo as 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 durante a condução, adicione-a à lista de permissões (se você for um OEM) ou anote a atividade com metadados otimizados para distractionOptimized . Para obter mais informações, consulte Diretrizes de distração do motorista .

DSP e áudio HAL

Certifique-se de revisar as diretrizes atualizadas sobre gravação de áudio sempre ativa simultânea 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 Responding to Hotwords .

Permissões

Conceder permissões privilegiadas do sistema

Dado que a permissão privilegiada não pode ser concedida pelo usuário, se uma VIA precisar de alguma delas, os OEMs devem 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 system-privilege allowlist à 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ão de permissões perigosas

Conforme indicado em Solicitando 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 apenas em manipuladores padrão . Também é possível pré-conceder permissões usando o arquivo de configuração default-permissions.xml . Para obter detalhes sobre restrições relacionadas à pré-concessão de permissões, consulte a Seção 9 no Documento de definição de compatibilidade do Android (CDD) .

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 residir em partições e pastas /product/priv-apps ou /vendor/priv-apps (veja mais sobre partições em Partições e Imagens e Criando Partições de Produto ).

No segundo caso, como 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 executadas como OTA (consulte Atualizações OTA ) ou por meio de atualizações de aplicativos de uma loja de aplicativos.

Costumização

Conforme mencionado em Automotive-Specific Concepts , a consistência e a personalização de UI/UX são mais importantes no setor automotivo do que em qualquer outro fator de forma. Para máxima interoperabilidade, o uso da AAOS Car UI Library é fortemente recomendado. Essa biblioteca inclui componentes e recursos que podem ser integrados em aplicativos automotivos projetados para serem personalizados por OEMs. Dessa forma, um único APK pode ser construído de forma que sua interface do usuário possa ser personalizada para o design de cada modelo de carro.