Flussi di integrazione

La selezione della VIA attiva viene eseguita da ManageAssistActivity in CarSettings. Questo flusso viene attivato dall'app PackageInstaller, nella sezione App predefinite della schermata Impostazioni.

App predefinite nella schermata Impostazioni

Figura 1. App predefinite nella schermata Impostazioni

La VIA selezionata è esposta al sistema in due modi:

  1. Tramite il servizio di sistema RolesManager
  2. Da VoiceInteractionManagerService tramite l'API interna AssistUtils

L'elenco delle VIA che possono essere impostate come predefinite può essere ottenuto utilizzando RolesManager con il nome del ruolo android.app.role.ASSISTANT.

Attivazione tramite hotword

Android fornisce AlwaysOnHotwordDetector come astrazione sopra il DSP dell'hardware. È un modo pratico per associare un VoiceInteractionService a un modello vocale per il riconoscimento vocale sempre attivo a basso consumo energetico. Questo è il flusso di interazione più comune e noto, in cui l'utente richiede di interagire con un'applicazione vocale (AV) per avviare una nuova conversazione. Le sessioni vocali avviate in questo modo sono identificate con SHOW_SOURCE_ASSIST_GESTURE flag.

Attivazione tramite hotword

Figura 2. Attivazione tramite hotword

Legenda: i servizi di sistema sono in blu chiaro, mentre i componenti VIA in verde.

Attivazione tramite PTT

L'attivazione può avvenire tramite una pressione breve o prolungata del tasto hardware. In AAOS, la funzionalità PTT è gestita da CarInputService. In un'implementazione predefinita, questo servizio gestisce gli eventi di input ricevuti tramite Vehicle HAL e, nel caso particolare dell'interazione vocale, applica la seguente logica agli eventi chiave:

  • Gli eventi PTT brevi (KeyEvent.KEYCODE_VOICE_ASSIST) vengono indirizzati a VoiceInteractionManagerService per avviare una nuova sessione vocale.
  • Gli eventi PTT lunghi vengono prima trasmessi ai ricevitori di proiezione (ad esempio Android Auto o CarPlay), poi ai dispositivi connessi tramite Bluetooth e infine all'app VIA locale.

Le sessioni avviate utilizzando questo flusso sono identificate con SHOW_SOURCE_PUSH_TO_TALK.

Attivazione tramite PTT

Figura 3. Attivazione tramite PTT

Per integrare un pulsante di controllo vocale hardware in AAOS, consulta la pagina sull'integrazione dell'input di chiavi di Automotive.

Attivazione tramite Tap-to-Talk (o pulsante software)

L'attivazione dell'interazione vocale dalla UI di sistema viene eseguita utilizzando AssistUtil. È un'API di sistema nascosta che può essere utilizzata solo dalle app di sistema in bundle, come la UI di sistema, che consente di:

  • Interagire con VoiceInteractionManagerService per avviare sessioni di controllo vocale.
  • Determinare qual è l'app VIA attualmente selezionata.

Per presentare in modo dinamico l'app VIA selezionata, la UI di sistema può utilizzare RoleManager e seguire le modifiche apportate al proprietario del ruolo per ROLE_ASSISTANT. Un esempio di come implementare l'attivazione di TTT è disponibile in CarSystemUI, AssistantButton.

Attivazione tramite Tap-to-Talk

Figura 4. Attivazione tramite Tap-to-Talk

Assistente vocale Tap-to-Read (TTR)

In Automotive, le notifiche pubblicate nel Centro notifiche identificate come notifiche INBOX o INBOX_IN_GROUP (ad esempio i messaggi SMS) includono un pulsante di azione Riproduci, che consente all'utente di far leggere le notifiche dalla VIA selezionata e, facoltativamente, di rispondere tramite comandi vocali.

Notifiche

Figura 5. Notifiche

Per ulteriori informazioni su come implementare questo flusso, consulta Gestisci i comandi di messaggistica.

Avvia l'app VIA tramite Avvio app dell'auto

Come qualsiasi altra app, le VIA possono includere una o più attività da avviare tramite Avvio app nel loro file manifest. Spetta allo sviluppatore dell'app e all'OEM che accettano di preinstallare l'app decidere cosa faranno queste attività.

Importante: in Automotive, tutte le attività, incluse quelle di sistema, sono soggette a limitazioni della UX durante la guida. Se l'esperienza che vuoi attivare da un'icona in Avvio applicazioni deve essere disponibile durante la guida, aggiungila alla lista consentita (se sei un OEM) o annota l'attività con i metadati distractionOptimized. Per ulteriori informazioni, consulta le linee guida sulla distrazione del conducente.

DSP e HAL audio

Assicurati di consultare le linee guida aggiornate relative alla registrazione audio sempre attiva e all'HAL audio in Acquisizione simultanea. L'accesso a queste API potrebbe avere un impatto significativo sul rendimento del rilevamento delle hotword, come spiegato nella sezione Rispondi alle hotword.

Autorizzazioni

Concedi autorizzazioni con privilegi di sistema

Poiché l'autorizzazione con privilegi non può essere concessa dall'utente, se una VIA la richiede, gli OEM devono precaricare il proprio APK nelle immagini di sistema e concedere le autorizzazioni esplicitamente nelle build. Vedi Richiedi autorizzazioni.

Per farlo, aggiungi una dipendenza dalla lista consentita dei privilegi al progetto:

Android.bp

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

Aggiungi il file di autorizzazione della lista consentita dei privilegi di sistema alla cartella 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>

Preconcessione di autorizzazioni pericolose

Come indicato in Richiedi autorizzazioni, la VIA richiede il consenso dell'utente per accedere ad alcune funzionalità. Alcune di queste autorizzazioni sono concesse in anticipo al VoiceInteractionService predefinito (vedi DefaultPermissionGrantPolicy.java). Per ulteriori informazioni sulle autorizzazioni per i gestori predefiniti, consulta Autorizzazioni utilizzate solo nei gestori predefiniti. È anche possibile concedere in anticipo le autorizzazioni utilizzando il default-permissions.xml file di configurazione. Per informazioni dettagliate sulle limitazioni relative alla preassegnazione delle autorizzazioni, consulta la Sezione 9 del Compatibility Definition Document (CDD) di Android.

Importante: in tutti i casi, solo la VIA predefinita avrebbe queste autorizzazioni concesse in anticipo. Se il sistema ha più di una VIA precaricata, la VIA non predefinita deve richiedere esplicitamente le autorizzazioni all'utente durante la configurazione o il primo utilizzo.

Distribuzione (preinstallazione e aggiornamenti del deployment)

Le VIA preinstallate devono trovarsi in partizioni e cartelle /product/priv-apps o /vendor/priv-apps (scopri di più sulle partizioni nella sezione Panoramica delle partizioni e Crea partizioni per i prodotti).

Nel secondo caso, poiché la partizione del fornitore potrebbe essere aggiornata distintamente dal sistema, le app ospitate qui non potranno accedere alle API di sistema @hide. A seconda della posizione delle app preinstallate, gli aggiornamenti potrebbero essere eseguiti come OTA (vedi Aggiornamenti OTA) o tramite aggiornamenti delle app da un app store.

Personalizzazione

Come accennato in Concetti specifici di Automotive, la coerenza e la personalizzazione della UI/UX sono più importanti nel settore auto e motori rispetto a qualsiasi altro fattore di forma. Per la massima interoperabilità, è vivamente consigliato l'utilizzo della libreria UI per auto di AAOS. Questa libreria include componenti e risorse che possono essere integrati nelle app per il settore auto e motori progettate per essere personalizzate dagli OEM. In questo modo, è possibile creare un singolo APK affinché la relativa UI possa essere personalizzata in base al design di ogni modello di auto.