App-Entwicklung

Um eine Voice Interaction Application (VIA) zu implementieren, führen Sie die folgenden Schritte aus:

  1. Erstellen Sie ein VIA-Skelett.
  2. ( optional ) Implementieren Sie einen Einrichtungs-/Anmeldeablauf.
  3. ( optional ) Implementieren Sie einen Einstellungsbildschirm.
  4. Deklarieren Sie die erforderlichen Berechtigungen in der Manifestdatei.
  5. Implementieren Sie eine Voice-Plate-Benutzeroberfläche.
  6. Implementieren Sie die Spracherkennung (muss die RecognitionService-API-Implementierung umfassen).
  7. Implementieren Sie die Äußerung (optional können Sie die TextToSpeech-API implementieren).
  8. Implementieren Sie die Befehlserfüllung. Sehen Sie sich diesen Inhalt unter „Befehle erfüllen“ an.

In den folgenden Abschnitten wird beschrieben, wie Sie die einzelnen oben genannten Schritte ausführen.

Erstellen Sie ein VIA-Skelett

Manifestiert

Eine App wird als App mit Sprachinteraktion erkannt, wenn Folgendes im Manifest enthalten ist:

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myvoicecontrol">
    ...

  <application ... >
    <service android:name=".MyInteractionService"
        android:label="@string/app_name"
        android:permission="android.permission.BIND_VOICE_INTERACTION"
        android:process=":interactor">
      <meta-data
          android:name="android.voice_interaction"
          android:resource="@xml/interaction_service" />
      <intent-filter>
        <action android:name=
          "android.service.voice.VoiceInteractionService" />
      </intent-filter>
    </service>
  </application>
</manifest>

In diesem Beispiel:

  • VIAs müssen einen Dienst bereitstellen, der VoiceInteractionService mit einem Absichtsfilter für die Aktion VoiceInteractionService.SERVICE_INTERFACE ("android.service.voice.VoiceInteractionService") erweitert.
  • Dieser Dienst muss über die Systemsignaturberechtigung BIND_VOICE_INTERACTION verfügen.
  • Dieser Dienst sollte eine android.voice_interaction Metadatendatei enthalten, die Folgendes enthält:

    res/xml/interaction_service.xml

    <voice-interaction-service
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:sessionService=
          "com.example.MyInteractionSessionService"
        android:recognitionService=
          "com.example.MyRecognitionService"
        android:settingsActivity=
          "com.example.MySettingsActivity"
        android:supportsAssist="true"
        android:supportsLaunchVoiceAssistFromKeyguard="true"
        android:supportsLocalInteraction="true" />
    

Einzelheiten zu den einzelnen Feldern finden Sie unter R.styleable#VoiceInteractionService . Da es sich bei allen VIAs auch um Spracherkennungsdienste handelt, müssen Sie Folgendes in Ihr Manifest aufnehmen:

AndroidManifest.xml

<manifest ...>
  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
  <application ...>
    ...
    <service android:name=".RecognitionService" ...>
      <intent-filter>
        <action android:name="android.speech.RecognitionService" />
        <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
      <meta-data
        android:name="android.speech"
        android:resource="@xml/recognition_service" />
    </service>
  </application>
</manifest>

Spracherkennungsdienste erfordern außerdem die folgenden Metadaten:

res/xml/recognition_service.xml

<recognition-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:settingsActivity="com.example.MyRecognizerSettingsActivity" />

VoiceInteractionService, VoiceInteractionSessionService und VoiceInteractionSession

Das folgende Diagramm zeigt den Lebenszyklus jeder dieser Einheiten:

Lebenszyklen

Abbildung 1. Lebenszyklen

Wie bereits erwähnt, ist VoiceInteractionService der Einstiegspunkt zu einem VIA. Die Hauptaufgaben dieses Dienstes sind:

  • Initialisieren Sie alle Prozesse, die so lange ausgeführt werden sollen, wie dieser VIA aktiv ist. Zum Beispiel Hotword-Erkennung.
  • Meldet unterstützte Sprachaktionen (siehe Sprachassistent Tap-to-Read ).
  • Starten Sie Sprachinteraktionssitzungen über den Sperrbildschirm (Tastenschutz).

In ihrer einfachsten Form würde eine VoiceInteractionService-Implementierung so aussehen:

public class MyVoiceInteractionService extends VoiceInteractionService {
    private static final List<String> SUPPORTED_VOICE_ACTIONS =
        Arrays.asList(
            CarVoiceInteractionSession.VOICE_ACTION_READ_NOTIFICATION,
            CarVoiceInteractionSession.VOICE_ACTION_REPLY_NOTIFICATION,
            CarVoiceInteractionSession.VOICE_ACTION_HANDLE_EXCEPTION
    );

    @Override
    public void onReady() {
        super.onReady();
        // TODO: Setup hotword detector
    }

    @NonNull
    @Override
    public Set<String> onGetSupportedVoiceActions(
            @NonNull Set<String> voiceActions) {
        Set<String> result = new HashSet<>(voiceActions);
        result.retainAll(SUPPORTED_VOICE_ACTIONS);
        return result;
    }
    ...
}

Die Implementierung von VoiceInteractionService#onGetSupportedVoiceActions() ist erforderlich, um Voice Assistant Tap-to-Read zu verarbeiten. Ein VoiceInteractionSessionService wird vom System verwendet, um eine VoiceInteractionSession zu erstellen und mit ihr zu interagieren. Es hat nur eine Aufgabe: Auf Anfrage neue Sitzungen zu starten.

public class MyVoiceInteractionSessionService extends VoiceInteractionSessionService {
    @Override
    public VoiceInteractionSession onNewSession(Bundle args) {
        return new MyVoiceInteractionSession(this);
    }
}

Schließlich wird in einer VoiceInteractionSession die meiste Arbeit erledigt. Eine einzelne Sitzungsinstanz kann zur Durchführung mehrerer Benutzerinteraktionen wiederverwendet werden. In AAOS gibt es eine Hilfs CarVoiceInteractionSession , die dabei hilft, einige der einzigartigen Automobilfunktionen zu implementieren.

public class MyVoiceInteractionSession extends CarVoiceInteractionSession {

    public InteractionSession(Context context) {
        super(context);
    }

    @Override
    protected void onShow(String action, Bundle args, int showFlags) {
        closeSystemDialogs();
        // TODO: Unhide UI and update UI state
        // TODO: Start processing audio input
    }
    ...
}

VoiceInteractionSession verfügt über eine große Menge an Rückrufmethoden, die in den folgenden Abschnitten erläutert werden. Eine vollständige Liste finden Sie in der Dokumentation zu VoiceInteractionSession .

Implementieren Sie einen Einrichtungs-/Anmeldeablauf

Die Einrichtung und Anmeldung kann wie folgt erfolgen:

  • Während des Geräte-Onboardings (Setup-Assistent).
  • Während des Sprachinteraktionsdienstwechsels (Einstellungen).
  • Beim ersten Start, wenn die App ausgewählt wird.

Einzelheiten zur empfohlenen Benutzererfahrung und visuellen Anleitung finden Sie unter Vorinstallierte Assistenten: UX-Anleitung .

Einrichtung während des Sprachdienstwechsels

Es ist immer möglich, dass der Benutzer ein VIA auswählt, das nicht ordnungsgemäß konfiguriert wurde. Dies kann passieren, weil:

  • Der Benutzer hat den Einrichtungsassistenten vollständig übersprungen oder den Schritt zur Konfiguration der Sprachinteraktion übersprungen.
  • Der Benutzer hat eine andere VIA ausgewählt als die, die beim Geräte-Onboarding konfiguriert wurde.

In jedem Fall verfügt ein VoiceInteractionService über mehrere Möglichkeiten, den Benutzer zum Abschluss der Einrichtung zu ermutigen:

  • Benachrichtigungserinnerung.
  • Automatische Sprachantwort, wenn der Benutzer versucht, es zu verwenden.

Hinweis : Es wird dringend davon abgeraten, einen VIA-Setup-Ablauf ohne ausdrückliche Benutzeranfrage zu präsentieren. Dies bedeutet, dass VIAs die automatische Anzeige von Inhalten auf der HU während des Gerätestarts oder infolge eines Benutzerwechsels oder einer Benutzerentsperrung vermeiden sollten.

Benachrichtigungserinnerung

Eine Benachrichtigungserinnerung ist eine unaufdringliche Möglichkeit, auf die Notwendigkeit einer Einrichtung hinzuweisen und Benutzern die Möglichkeit zu geben, in den Einrichtungsablauf des Assistenten zu navigieren.

Benachrichtigungserinnerung

Abbildung 2. Benachrichtigungserinnerung

So würde dieser Ablauf funktionieren:

Ablauf der Benachrichtigungserinnerung

Abbildung 3. Ablauf der Benachrichtigungserinnerung

Sprachantwort

Dies ist der am einfachsten zu implementierende Ablauf, der eine Äußerung bei einem VoiceInteractionSession#onShow() Rückruf initiiert, dem Benutzer erklärt, was zu tun ist, und ihn dann fragt (sofern die Einrichtung aufgrund des UX-Einschränkungsstatus zulässig ist), ob er initiieren möchte den Einrichtungsablauf. Wenn die Einrichtung zu diesem Zeitpunkt nicht möglich ist, erklären Sie auch diese Situation.

Einrichtung beim ersten Gebrauch

Es besteht immer die Möglichkeit, dass der Benutzer eine VIA auslöst, die nicht ordnungsgemäß konfiguriert wurde. In solchen Fällen:

  1. Informieren Sie den Benutzer mündlich über diese Situation (z. B. „Um ordnungsgemäß zu funktionieren, müssen Sie einige Schritte ausführen …“).
  2. Wenn die UX-Einschränkungs-Engine dies zulässt (siehe UX_RESTRICTIONS_NO_SETUP ), fragen Sie den Benutzer, ob er den Einrichtungsprozess starten möchte, und öffnen Sie dann den Einstellungsbildschirm für die VIA.
  3. Andernfalls (z. B. wenn der Benutzer fährt) hinterlassen Sie eine Benachrichtigung, damit der Benutzer auf die Option klicken kann, wenn dies sicher ist.

Erstellen Sie Einrichtungsbildschirme für die Sprachinteraktion

Einrichtungs- und Anmeldebildschirme sollten als regelmäßige Aktivitäten entwickelt werden. Sehen Sie sich die UX- und visuellen Richtlinien für die UI-Entwicklung in „Vorinstallierte Assistenten: UX-Anleitung“ an.

Generelle Richtlinien:

  • VIAs sollten es Benutzern ermöglichen, die Einrichtung jederzeit zu unterbrechen und fortzusetzen.
  • Das Setup sollte nicht zulässig sein, wenn die Einschränkung UX_RESTRICTIONS_NO_SETUP in Kraft ist. Einzelheiten finden Sie in den Richtlinien zur Fahrerablenkung .
  • Die Setup-Bildschirme sollten zum Designsystem des jeweiligen Fahrzeugs passen. Das allgemeine Bildschirmlayout, die Symbole, Farben und andere Aspekte sollten mit dem Rest der Benutzeroberfläche übereinstimmen. Weitere Informationen finden Sie unter „Anpassung“ .

Implementieren Sie einen Einstellungsbildschirm

Integration der Einstellungen

Abbildung 4. Integration der Einstellungen

Einstellungsbildschirme sind normale Android-Aktivitäten. Falls implementiert, muss ihr Einstiegspunkt in res/xml/interaction_service.xml als Teil der VIA-Manifeste deklariert werden (siehe Manifeste ). Der Abschnitt „Einstellungen“ ist ein guter Ort, um mit der Einrichtung und Anmeldung fortzufahren (falls der Benutzer sie nicht abgeschlossen hat) oder bei Bedarf eine Abmelde- oder Benutzerwechseloption anzubieten. Ähnlich wie die oben beschriebenen Setup-Bildschirme sollten diese Bildschirme:

  • Bieten Sie die Möglichkeit, zum vorherigen Bildschirm im Bildschirmstapel zurückzukehren (z. B. zu den Fahrzeugeinstellungen).
  • Während der Fahrt ist das Fahren nicht gestattet. Einzelheiten finden Sie in den Richtlinien zur Fahrerablenkung .
  • Passen Sie jedes Fahrzeugdesignsystem an. Einzelheiten finden Sie unter Anpassung .

Deklarieren Sie die erforderlichen Berechtigungen in der Manifestdatei

Die für eine VIA erforderlichen Berechtigungen können in drei Kategorien unterteilt werden:

  • Systemsignaturberechtigungen. Hierbei handelt es sich um Berechtigungen, die nur vorinstallierten, vom System signierten APKs gewährt werden. Benutzer können diese Berechtigungen nicht erteilen, sondern nur OEMs, wenn sie ihre Systemabbilder erstellen. Weitere Informationen zum Erhalten von Signaturberechtigungen finden Sie unter Systemprivilegierte Berechtigungen erteilen.
  • Gefährliche Berechtigungen. Hierbei handelt es sich um Berechtigungen, die ein Benutzer über das PermissionsController-Dialogfeld erteilen muss. OEMs können dem Standard-VoiceInteractionService einige dieser Berechtigungen vorab erteilen. Da sich diese Standardeinstellung jedoch von Gerät zu Gerät ändern kann, sollten Apps diese Berechtigungen bei Bedarf anfordern können.
  • Andere Berechtigungen. Dies sind alle anderen Berechtigungen, die keinen Benutzereingriff erfordern. Diese Berechtigungen werden vom System automatisch erteilt.

Vor diesem Hintergrund konzentriert sich der folgende Abschnitt nur auf die Anforderung gefährlicher Berechtigungen. Berechtigungen sollten nur angefordert werden, während sich der Benutzer im Anmelde- oder Einstellungsbildschirm befindet.

Wenn die App nicht über die für den Betrieb erforderlichen Berechtigungen verfügt, besteht die empfohlene Vorgehensweise darin, dem Benutzer die Situation per Sprachansage zu erklären und eine Benachrichtigung zu verwenden, um ein Angebot bereitzustellen, mit dem der Benutzer zurück zu den VIA-Einstellungsbildschirmen navigieren kann . Einzelheiten finden Sie unter 1. Benachrichtigungserinnerung .

Fordern Sie Berechtigungen im Rahmen des Einstellungsbildschirms an

Gefährliche Berechtigungen werden mit der regulären ActivityCompat#requestPermission() Methode (oder einer gleichwertigen Methode) angefordert. Einzelheiten zum Anfordern von Berechtigungen finden Sie unter App-Berechtigungen anfordern .

Fordern Sie Berechtigungen an

Abbildung 5. Berechtigungen anfordern

Berechtigung zum Zuhören von Benachrichtigungen

Um den TTR-Fluss zu implementieren, müssen VIAs als Benachrichtigungs-Listener festgelegt werden. Hierbei handelt es sich nicht um eine Berechtigung an sich, sondern um eine Konfiguration, die es dem System ermöglicht, Benachrichtigungen an registrierte Zuhörer zu senden. Um herauszufinden, ob der VIA Zugriff auf diese Informationen gewährt wurde, können Apps:

Wenn dieser Zugriff nicht vorab gewährt wird, sollte die VIA den Benutzer mithilfe einer Kombination aus Äußerungen und Benachrichtigungen zum Abschnitt „Benachrichtigungszugriff“ der Fahrzeugeinstellungen weiterleiten. Mit dem folgenden Code kann der entsprechende Bereich der Einstellungen-App geöffnet werden:

private void requestNotificationListenerAccess() {
    Intent intent = new Intent(Settings
        .ACTION_NOTIFICATION_LISTENER_SETTINGS);
    intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
    startActivity(intent);
}

Implementieren Sie eine Voice-Plate-Benutzeroberfläche

Wenn eine VoiceInteractionSession einen onShow() -Rückruf empfängt, kann sie eine Voice-Plate-Benutzeroberfläche präsentieren. Visuelle und UX-Richtlinien zur Sprachplattenimplementierung finden Sie unter Vorinstallierte Assistenten: UX-Anleitung .

Anzeige der Stimmtafel

Abbildung 6. Anzeige der Stimmplatte

Es gibt zwei Möglichkeiten, diese Benutzeroberfläche zu implementieren:

  • VoiceInteractionSession#onCreateContentView() überschreiben
  • Starten Sie eine Aktivität mit VoiceInteractionSession#startAssistantActivity()

Verwenden Sie onCreateContentView()

Dies ist die Standardmethode zur Darstellung einer Sprachtafel. Die Basisklasse VoiceInteractionSession erstellt ein Fenster und verwaltet dessen Lebenszyklus, solange eine Sprachsitzung aktiv ist. Apps müssen VoiceInteractionSession#onCreateContentView() überschreiben und eine Ansicht zurückgeben, die an dieses Fenster angehängt wird, sobald die Sitzung erstellt wird. Diese Ansicht sollte zunächst unsichtbar sein. Wenn eine Sprachinteraktion beginnt, sollte diese Ansicht bei VoiceInteractionSession#onShow() sichtbar und dann bei VoiceInteractionSession#onHide() wieder unsichtbar gemacht werden.

public class MyVoiceInteractionSession extends CarVoiceInteractionSession {
    private View mVoicePlate;
    …

    @Override
    public View onCreateContentView() {
        mVoicePlate = inflater.inflate(R.layout.voice_plate, null);
        …
   }

    @Override
    protected void onShow(String action, Bundle args, int showFlags) {
        // TODO: Update UI state to "listening"
        mVoicePlate.setVisibility(View.VISIBLE);
    }

    @Override
    public void onHide() {
        mVoicePlate.setVisibility(View.GONE);
    }
    …
}

Wenn Sie diese Methode verwenden, möchten Sie möglicherweise VoiceInteractionSession#onComputeInsets() anpassen, um verdeckte Bereiche Ihrer Benutzeroberfläche zu berücksichtigen.

Verwenden Sie startAssistantActivity()

In diesem Fall delegiert VoiceInteractionSession die Handhabung der Voice-Plate-Benutzeroberfläche an eine reguläre Aktivität. Wenn diese Option verwendet wird, muss eine VoiceInteractionSession Implementierung die Erstellung ihres Standardinhaltsfensters (siehe Verwenden von onCreateContentView() ) beim onPrepareShow() Rückruf deaktivieren. Bei VoiceInteractionSession#onShow() würde die Sitzung die Sprachplattenaktivität mithilfe von VoiceInteractionSession#startAssistantActivity() starten. Diese Methode initiiert die Benutzeroberfläche mit den richtigen Fenstereinstellungen und Aktivitätsflags.

public class MyVoiceInteractionSession extends CarVoiceInteractionSession {
    …

    @Override
    public void onPrepareShow(Bundle args, int showFlags) {
        super.onPrepareShow(args, showFlags);
        setUiEnabled(false);
    }

    @Override
    protected void onShow(String action, Bundle args, int showFlags) {
        closeSystemDialogs();
        Intent intent = new Intent(getContext(), VoicePlateActivity.class);
        intent.putExtra(VoicePlateActivity.EXTRA_ACTION, action);
        intent.putExtra(VoicePlateActivity.EXTRA_ARGS, args);
        startAssistantActivity(intent);
    }

    …
}

Um eine Kommunikation zwischen dieser Aktivität und der VoiceInteractionSession aufrechtzuerhalten, ist möglicherweise eine Reihe interner Absichten oder Dienstbindungen erforderlich. Wenn beispielsweise VoiceInteractionSession#onHide() aufgerufen wird, muss die Sitzung diese Anforderung an die Aktivität übergeben können.

Wichtig. Im Automobilbereich können während der Fahrt nur speziell annotierte Aktivitäten oder Aktivitäten angezeigt werden, die in der UXR-„Zulassungsliste“ aufgeführt sind. Dies gilt auch für Aktivitäten, die mit VoiceInteractionSession#startAssistantActivity() gestartet wurden. Denken Sie daran, Ihre Aktivität entweder mit <meta-data android:name="distractionOptimized" android:value="true"/> kommentieren oder diese Aktivität in den systemActivityWhitelist Schlüssel von /packages/services/Car/service/res/values/config.xml aufzunehmen. /packages/services/Car/service/res/values/config.xml Datei. Weitere Informationen finden Sie unter Richtlinien zur Fahrerablenkung .

Implementieren Sie die Spracherkennung

In diesem Abschnitt erfahren Sie, wie Sie die Spracherkennung durch die Erkennung und Erkennung von Hotwords implementieren. Ein Hotword ist ein Triggerwort, mit dem eine neue Abfrage oder Aktion per Spracheingabe gestartet wird. Zum Beispiel „OK Google“ oder „Hey Google“.

DSP-Hotword-Erkennung

Android bietet über den AlwaysOnHotwordDetector Zugriff auf einen ständig aktiven Hotword-Detektor auf DSP-Ebene. Möglichkeit, die Hotword-Erkennung bei geringer CPU-Auslastung zu implementieren. Die Nutzung dieser Funktionalität gliedert sich in zwei Teile:

Die VoiceInteractionService-Implementierung kann mithilfe von VoiceInteractionService#createAlwaysOnHotwordDetector() einen Hotword-Detektor erstellen und dabei eine Schlüsselphrase und ein Gebietsschema übergeben, das zur Erkennung verwendet werden soll. Als Ergebnis erhält die App einen onAvailabilityChanged() -Rückruf mit einem der folgenden möglichen Werte:

  • STATE_HARDWARE_UNAVAILABLE . DSP-Fähigkeit ist auf dem Gerät nicht verfügbar. In diesem Fall wird die Software-Hotword-Erkennung verwendet.
  • STATE_HARDWARE_UNSUPPORTED . DSP-Unterstützung ist im Allgemeinen nicht verfügbar, DSP unterstützt jedoch keine bestimmte Kombination aus Schlüsselphrase und Gebietsschema. Die App kann sich für die Software-Hotword-Erkennung entscheiden.
  • STATE_HARDWARE_ENROLLED . Die Hot-Word-Erkennung ist fertig und kann durch Aufruf der startRecognition() Methode gestartet werden.
  • STATE_HARDWARE_UNENROLLED . Ein Soundmodell für die angeforderte Schlüsselphrase ist nicht verfügbar, eine Registrierung ist jedoch möglich.

Die Registrierung von Soundmodellen zur Hotword-Erkennung kann mithilfe von IVoiceInteractionManagerService#updateKeyphraseSoundModel() erfolgen. Es können gleichzeitig mehrere Modelle im System registriert sein, aber nur ein Modell ist einem AlwaysOnHotwordDetector zugeordnet. Die DSP-Hotword-Erkennung ist möglicherweise nicht auf allen Geräten verfügbar. VIA-Entwickler sollten die Hardwarefunktionen mithilfe der Methode getDspModuleProperties() überprüfen. Beispielcode, der zeigt, wie Soundmodelle registriert werden, finden Sie unter VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java . Informationen zur gleichzeitigen Hotword-Erkennung finden Sie unter Gleichzeitige Erfassung .

Software-Hotword-Erkennung

Wie oben erwähnt, ist die DSP-Hotword-Erkennung möglicherweise nicht auf allen Geräten verfügbar (der Android-Emulator bietet beispielsweise keine DSP-Emulation). In diesem Fall ist die Software-Spracherkennung die einzige Alternative. Um Störungen anderer Apps zu vermeiden, die möglicherweise Zugriff auf das Mikrofon benötigen, müssen VIAs auf die Audioeingabe zugreifen, indem sie Folgendes verwenden:

Beide Konstanten sind @hide und nur für gebündelte Apps verfügbar.

Verwalten Sie Audioeingabe und Spracherkennung

Die Audioeingabe würde mithilfe der MediaRecorder-Klasse implementiert werden. Weitere Informationen zur Verwendung dieser API finden Sie in der MediaRecorder-Übersicht . Es wird erwartet, dass Sprachinteraktionsdienste ebenfalls Implementierungen RecognitionService Klasse sind. Jede App im System, die eine Spracherkennung erfordert, greift auf diese Funktion zu. Um eine Spracherkennung durchzuführen und Zugriff auf das Mikrofon zu haben, müssen VIAs android.permission.RECORD_AUDIO enthalten. Von Apps, die auf eine RecognitionService Implementierung zugreifen, wird erwartet, dass sie ebenfalls über diese Berechtigung verfügen.

Vor Android 10 wurde der Zugriff auf das Mikrofon jeweils nur einer App gewährt (mit Ausnahme der Hotword-Erkennung, siehe oben). Ab Android 10 kann der Mikrofonzugriff geteilt werden. Weitere Informationen finden Sie unter Audioeingabe teilen .

Auf die Audioausgabe zugreifen

Wenn die VIA bereit ist, mündliche Antworten zu geben, ist es wichtig, die folgenden Richtlinien zu befolgen: