Integrationsabläufe

Die Auswahl der aktiven VIA erfolgt über ManageAssistActivity in den Fahrzeugeinstellungen. Dieser Ablauf wird von der PackageInstaller App im Bereich „Standard-Apps“ auf dem Einstellungsbildschirm ausgelöst.

Standard-Apps auf dem Einstellungsbildschirm

Abbildung 1: Standard-Apps auf dem Einstellungsbildschirm

Die ausgewählte VIA wird dem System auf zwei Arten zur Verfügung gestellt:

  1. Im Rahmen des RolesManager-Systemdienstes
  2. Über VoiceInteractionManagerService durch die interne AssistUtils API.

Eine Liste der Kandidaten für virtuelle Standorte lässt sich mit RolesManager und dem Rollennamen android.app.role.ASSISTANT abrufen.

Hotword-Trigger

Android bietet AlwaysOnHotwordDetector als Abstraktion über dem Hardware-DSP. So kannst du ganz einfach einen VoiceInteractionService mit einem Sprachmodell für die energieeffiziente, ständige Spracherkennung verknüpfen. Dies ist der häufigste und bekannteste Interaktionsablauf, bei dem der Nutzer die Interaktion mit einer Sprachanwendung (VA) anfordert, um eine neue Unterhaltung zu starten. So gestartete Sprachsitzungen werden mit SHOW_SOURCE_ASSIST_GESTURE flag gekennzeichnet.

Hotword-Trigger

Abbildung 2: Hotword-Trigger

Legende. Systemdienste werden in Hellblau und VIA-Komponenten in Grün angezeigt.

PTT-Trigger

Das gilt für langes oder kurzes Drücken der Hardwaretaste. In AAOS wird die Push-to-Talk-Funktion von CarInputService verwaltet. Bei einer Standardimplementierung verarbeitet dieser Dienst Eingabeereignisse, die über die Vehicle HAL empfangen werden. Im Fall von Sprachinteraktionen wird die folgende Logik auf wichtige Ereignisse angewendet:

  • Kurze PTT-Ereignisse (KeyEvent.KEYCODE_VOICE_ASSIST) werden an VoiceInteractionManagerService weitergeleitet, um eine neue Sprachsitzung zu starten.
  • Lange PTT-Ereignisse werden zuerst an Projektionsempfänger (z. B. Android Auto oder CarPlay), dann an per Bluetooth verbundene Geräte und schließlich an die lokale VIA-App übergeben.

Sitzungen, die mit diesem Ablauf gestartet wurden, werden mit SHOW_SOURCE_PUSH_TO_TALK gekennzeichnet.

PTT-Trigger

Abbildung 3: PTT-Trigger

Informationen zur Integration einer Hardware-Schaltfläche für die Sprachsteuerung in AAOS findest du unter Automotive Key Input.

Auslöser für die Sprachsuche durch Tippen (oder Softwaretaste)

Die Sprachinteraktion über die System-UI wird mit AssistUtil ausgelöst. Dies ist eine ausgeblendete System-API, die nur von gebündelten System-Apps wie der System-Benutzeroberfläche verwendet werden kann. Sie ermöglicht Folgendes:

  • Mit VoiceInteractionManagerService interagieren, um Sprachsteuerungssitzungen zu starten.
  • Herausfinden, welche VIA derzeit ausgewählt ist.

Um die ausgewählte VIA-App dynamisch anzuzeigen, kann die System-UI RoleManager verwenden und Änderungen am Rolleninhaber für ROLE_ASSISTANT verfolgen. Ein Beispiel für die Implementierung der TTT-Triggerung findest du in CarSystemUI, AssistantButton.

Auslösen der Funktion „Zum Sprechen tippen“

Abbildung 4: Auslösen der Funktion „Zum Sprechen tippen“

Sprachassistent – Zum Vorlesen tippen

In der Automobilbranche enthalten Benachrichtigungen, die im Benachrichtigungscenter als INBOX- oder INBOX_IN_GROUP-Benachrichtigungen gekennzeichnet sind (z. B. SMS-Nachrichten), die Schaltfläche „Abspielen“. Über diese Schaltfläche kann der Nutzer die Benachrichtigungen von der ausgewählten Sprachschnittstelle vorlesen lassen und optional per Sprachbefehl antworten.

Benachrichtigungen

Abbildung 5: Benachrichtigungen

Weitere Informationen zur Implementierung dieses Ablaufs findest du unter Messaging-Befehle verarbeiten.

VIA über den Auto-Launcher starten

Wie jede andere App können auch virtuelle Assistenten-Apps eine oder mehrere Launcher-Aktivitäten in ihrem Manifest enthalten. Es liegt in der Verantwortung des App-Entwicklers und des OEM, der die Vorinstallation dieser App akzeptiert, zu entscheiden, was diese Aktivitäten bewirken.

Wichtig: Im Bereich Automotive unterliegen alle Aktivitäten, einschließlich Systemaktivitäten, während der Fahrt UX-Einschränkungen. Wenn die Funktion, die du über ein Launcher-Symbol aktivieren möchtest, während der Fahrt verfügbar sein muss, füge sie entweder der Zulassungsliste hinzu (wenn du ein OEM bist) oder versieh die Aktivität mit distractionOptimized-Metadaten. Weitere Informationen findest du in den Richtlinien zu Ablenkungen für Fahrer.

DSP und Audio-HAL

Lies dir die aktualisierten Richtlinien zur gleichzeitigen Audioaufzeichnung und zu Audio-HAL unter Gleichzeitige Aufnahme durch. Der Zugriff auf diese APIs kann sich erheblich auf die Leistung der Hotword-Erkennung auswirken, wie unter Auf Hotwords reagieren erläutert.

Berechtigungen

Systemberechtigungen gewähren

Da eine Berechtigung mit erweiterten Befugnissen nicht vom Nutzer erteilt werden kann, müssen OEMs ihre APKs vorab in ihre System-Images laden und diese Berechtigungen in ihren Builds ausdrücklich erteilen, wenn eine VIA eine davon benötigt. Weitere Informationen findest du unter Berechtigungen anfordern.

Füge dazu deinem Projekt eine Abhängigkeit von der Berechtigungs-Zulassungsliste hinzu:

Android.bp

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

Füge die Berechtigungsdatei für die Zulassungsliste für Systemberechtigungen dem Ordner yourdata/etc/car hinzu:

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>

Vorabgewährung gefährlicher Berechtigungen

Wie unter Berechtigungen anfordern angegeben, ist für den Zugriff auf bestimmte Funktionen die Einwilligung des Nutzers erforderlich. Einige dieser Berechtigungen werden dem Standard-VoiceInteractionService vorab gewährt (siehe DefaultPermissionGrantPolicy.java). Weitere Informationen zu Berechtigungen für Standard-Handler findest du unter Nur in Standard-Handlern verwendete Berechtigungen. Es ist auch möglich, Berechtigungen über die Konfigurationsdatei default-permissions.xml vorab zu gewähren. Details zu den Einschränkungen beim Voraberteilen von Berechtigungen findest du in Abschnitt 9 des Android-Dokuments zur Kompatibilitätsdefinition (CDD).

Wichtig: In allen Fällen wurden diese Berechtigungen nur der Standard-VIA vorab gewährt. Wenn auf dem System mehrere VIAs vorinstalliert sind, muss die nicht standardmäßige VIA im Rahmen der Einrichtung oder bei der ersten Verwendung ausdrücklich Berechtigungen vom Nutzer anfordern.

Bereitstellung (Updates vorinstallieren und bereitstellen)

Vorinstallierte VIAs müssen sich in /product/priv-apps- oder /vendor/priv-apps-Partitionen und ‑Ordnern befinden. Weitere Informationen zu Partitionen findest du unter Partitionen – Übersicht und Produktpartitionen erstellen.

Im zweiten Fall können hier gehostete Apps nicht auf ausgeblendete System-APIs zugreifen, da die Anbieterpartition unabhängig vom System aktualisiert werden kann. Je nach Speicherort der vorinstallierten Apps können Updates als OTA (siehe OTA-Updates) oder über App-Updates aus einem App-Shop durchgeführt werden.

Personalisierung

Wie bereits in den branchenspezifischen Konzepten für die Automobilbranche erwähnt, sind Konsistenz und Anpassung von UI/UX in der Automobilbranche wichtiger als in jedem anderen Formfaktor. Für maximale Interoperabilität wird die Verwendung der Car UI-Bibliothek von AAOS dringend empfohlen. Diese Bibliothek enthält Komponenten und Ressourcen, die in Automotive-Apps eingebunden werden können, die von OEMs angepasst werden sollen. Damit kann ein einzelnes APK so erstellt werden, dass seine Benutzeroberfläche an das Design jedes Automodells angepasst werden kann.