A seleção da VIA ativa é feita por
ManageAssistActivity
em 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 serviço do sistema
RolesManager
- Pelo
VoiceInteractionManagerService
pela API internaAssistUtils
.
Uma lista de VIAs candidatas pode ser obtida usando RolesManager
com o nome de função 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
pede para interagir 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 VIA, em verde.
Acionamento de PTT
Isso se aplica a um pressionamento longo ou curto 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 de interação por voz, aplica a seguinte lógica aos eventos principais:
- Eventos de PTT curtos (
KeyEvent.KEYCODE_VOICE_ASSIST
) são direcionados aVoiceInteractionManagerService
para iniciar uma nova sessão de voz. - Eventos de PTT longos são transmitidos primeiro para receptores de projeção (por exemplo, Android Auto ou CarPlay), depois para dispositivos conectados por Bluetooth e, por fim, para o 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 a integração de entrada de chave automotiva.
Acionamento do recurso "Toque para falar" (ou botão de software)
O acionamento da interação por voz na IU do sistema é feito usando 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 é 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 detentor de função de ROLE_ASSISTANT
.
Um exemplo de como implementar o acionamento do TTT pode ser encontrado em CarSystemUI, AssistantButton
.
Figura 4. Acionamento do recurso "Toque para falar"
Assistente por voz com a função "Toque para ler" (TTR, na sigla em inglês)
No Automotive, as notificações postadas na Central de notificações identificadas comoINBOX
ou INBOX_IN_GROUP
(por exemplo, mensagens SMS)
incluem um botão de ação do Play, que permite que o usuário receba notificações lidas em voz
pelo VIA selecionado e, opcionalmente, responda por voz.
Figura 5. Notificações
Para mais informações sobre como implementar esse fluxo, consulte Processar comandos de mensagens.
Iniciar o 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 aceitar a pré-instalação desse app para decidir o que essas atividades fariam.
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 de inicialização precisa estar disponível durante a direção, adicione-a à
lista de permissões (se você for um OEM) ou anote a atividade com os metadados
distractionOptimized
. Para mais informações, consulte
Diretrizes sobre distração do motorista.
DSP e HAL de áudio
Confira as diretrizes atualizadas sobre a gravação de áudio sempre ativada e a HAL de áudio em Captura simultânea. O acesso a essas APIs pode ter um impacto significativo no desempenho da detecção de palavras-chave, conforme explicado em Como 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égio 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 concedidas previamente
Conforme indicado em
Permissões
de solicitação, o VIA exige o consentimento do usuário para acessar determinadas funcionalidades. Algumas dessas
permissões são concedidas previamente ao VoiceInteractionService
padrão (confira
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 conceder permissões antecipadamente 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 pré-concedidas. Se o sistema tiver mais de um VIA pré-carregado, o VIA não padrão precisará solicitar explicitamente as permissões ao usuário como parte da configuração ou durante o primeiro uso.
Distribuição (pré-instalar e implantar atualizações)
As VIAs pré-instaladas precisam estar em partições e pastas /product/priv-apps
ou
/vendor/priv-apps
. Para saber mais sobre partições, consulte 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 OTA (consulte Atualizações OTA) ou por atualizações de apps de uma app store.
Personalização
Conforme mencionado em Conceitos específicos do setor automotivo, a consistência e a personalização de UI/UX são mais importantes no setor automotivo do que em qualquer outro formato. Para a 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 forma que a interface possa ser personalizada de acordo com o design de cada modelo de carro.