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

Figura 1. Apps padrão na tela "Configurações"
A VIA selecionada é exposta ao sistema de duas maneiras:
- Como parte do
RolesManagerserviço do sistema - Pelo
VoiceInteractionManagerServiceusando a API internaAssistUtils.
Uma lista de VIAs candidatas pode ser obtida usando RolesManager
com o nome do papel android.app.role.ASSISTANT.
Acionamento de hotword
O Android fornece o AlwaysOnHotwordDetector
como uma abstração sobre o DSP de hardware. Isso oferece 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 solicita a interação com um aplicativo de voz (VA, na sigla em inglês) para iniciar uma nova conversa. As sessões de voz
iniciadas dessa forma são identificadas com SHOW_SOURCE_ASSIST_GESTURE flag.
Figura 2. Acionamento de hotword
Legenda Os serviços do sistema aparecem em azul claro, e os componentes da VIA, em verde.
Acionamento de PTT
Isso se aplica a uma pressão longa ou curta do botão físico. No AAOS, o PTT é processado pelo CarInputService. Em uma implementação padrão, esse serviço processa eventos de entrada recebidos pelo HAL veicular e, no caso específico da interação por voz, aplica a seguinte lógica aos eventos de chave:
- Eventos PTT curtos (
KeyEvent.KEYCODE_VOICE_ASSIST) são direcionados aoVoiceInteractionManagerServicepara iniciar uma nova sessão de voz. - 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, por fim, ao app VIA local.
As sessões iniciadas usando esse fluxo são identificadas com SHOW_SOURCE_PUSH_TO_TALK.

Figura 3. Acionamento de PTT
Para integrar um botão de controle de voz de hardware ao AAOS, consulte Integração de entrada de chave automotiva.
Acionamento de "Toque para falar" (ou botão de software)
A interação por voz da interface do sistema é feita usando o AssistUtil. Essa é uma API do sistema oculta que só pode ser usada por apps do sistema agrupados, como a interface do sistema, que permite:
- Interagir com
VoiceInteractionManagerServicepara iniciar sessões de controle de voz. - Determinar qual é a VIA selecionada no momento.
Para apresentar dinamicamente o app VIA selecionado, a interface do sistema pode usar
RoleManager
e acompanhar as mudanças no titular do papel para ROLE_ASSISTANT.
Um exemplo de como implementar o acionamento de TTT pode ser encontrado no CarSystemUI, AssistantButton.

Figura 4. Acionamento de "Toque para falar"
Toque para ler (TTR) do assistente por voz
No setor automotivo, as notificações postadas na Central de notificações identificadas comoINBOX ou INBOX_IN_GROUP notificações (por exemplo, mensagens SMS)
incluem um botão de ação "Reproduzir", que permite ao usuário ler as notificações em voz alta
pela VIA selecionada e, opcionalmente, responder por voz.

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 acesso rápido no manifesto. Cabe ao desenvolvedor de apps e ao OEM que aceita a pré-instalação desse app decidir o que essas atividades farão.
Importante. No setor automotivo, 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 na tela de início precisa estar disponível durante a direção, adicione-a à
lista de permissões (se você for um OEM) ou anote a atividade com distractionOptimized
metadados. Para mais informações, consulte as
diretrizes de distração do motorista.
DSP e HAL de áudio
Consulte as diretrizes atualizadas sobre gravação de áudio simultânea sempre ativada e HAL de áudio em Captura simultânea. O acesso a essas APIs pode ter um impacto significativo no desempenho da detecção de hotword conforme explicado em Responder a hotwords.
Permissões
Conceder permissões privilegiadas do sistema
Como a permissão privilegiada não pode ser concedida pelo usuário, se uma VIA precisar de alguma delas, os OEMs precisam pré-carregar o APK nas imagens do sistema e conceder essas permissões explicitamente nas builds. Consulte Solicitar permissões.
Para fazer isso, adicione uma dependência de lista de permissões privilegiadas ao projeto:
Android.bp
android_app {
...
required: ["privapp_allowlist_com.example.myvoicecontrol"],
...
}Adicione o arquivo de permissão da lista de permissões privilegiadas 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>
Permissões perigosas pré-concedidas
Conforme indicado em
Solicitar
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 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 default-permissions.xml
arquivo de configuração. Para detalhes sobre
restrições relacionadas à pré-concessão de permissões, consulte a seção 9 do Android
Documento de definição de compatibilidade (CDD).
Importante. Em todos os casos, apenas a VIA padrão terá essas permissões pré-concedidas. Se o sistema tiver mais de uma VIA pré-carregada, a VIA não padrão precisará solicitar 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 nas 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 do local dos apps pré-instalados, as atualizações podem ser realizadas como uma OTA (consulte Atualizações OTA) ou por atualizações de apps de uma loja de apps.
Personalização
Conforme mencionado em Conceitos específicos do setor automotivo, a consistência e a personalização da interface/UX são mais importantes no setor automotivo do que em qualquer outro formato. Para máxima interoperabilidade, é altamente recomendável usar a biblioteca de interface do carro do AAOS . Essa biblioteca inclui componentes e recursos que podem ser integrados a apps automotivos projetados para serem personalizados por OEMs. Dessa forma, um único APK pode ser criado de modo que a interface possa ser personalizada para o design de cada modelo de carro.