Um eine Voice Interaction Application (VIA) zu implementieren, führen Sie die folgenden Schritte aus:
- Erstellen Sie ein VIA-Skelett.
- ( optional ) Implementieren Sie einen Einrichtungs-/Anmeldeablauf.
- ( optional ) Implementieren Sie einen Einstellungsbildschirm.
- Deklarieren Sie die erforderlichen Berechtigungen in der Manifestdatei.
- Implementieren Sie eine Voice-Plate-Benutzeroberfläche.
- Implementieren Sie die Spracherkennung (muss die RecognitionService-API-Implementierung umfassen).
- Implementieren Sie die Äußerung (optional können Sie die TextToSpeech-API implementieren).
- 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 AktionVoiceInteractionService.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:
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.
Abbildung 2. Benachrichtigungserinnerung
So würde dieser Ablauf funktionieren:
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:
- Informieren Sie den Benutzer mündlich über diese Situation (z. B. „Um ordnungsgemäß zu funktionieren, müssen Sie einige Schritte ausführen …“).
- 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.
- 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
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 .
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:
- (Optional) Überprüfen Sie im Voraus, ob Benachrichtigungs-Listener vorhanden sind, indem Sie
CarAssistUtils#assistantIsNotificationListener()
verwenden. Dies könnte beispielsweise während des Einrichtungsablaufs erfolgen. - (Obligatorisch) Reagieren Sie auf die Behandlung von
CarVoiceInteractionSession#onShow()
mit der AktionVOICE_ACTION_HANDLE_EXCEPTION
und der AusnahmeEXCEPTION_NOTIFICATION_LISTENER_PERMISSIONS_MISSING
.
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 .
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:
- Instanziierung eines
AlwaysOnHotwordDetector
. - Registrierung eines Soundmodells zur Hotword-Erkennung.
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 derstartRecognition()
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:
- Für die Audioaufnahme muss MediaRecorder.AudioSource.HOTWORD verwendet werden.
- Halten Sie die Berechtigung
android.Manifest.permission.CAPTURE_AUDIO_HOTWORD
.
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:
- Beim Anfordern des Audiofokus oder beim Verwalten der Audioausgabe muss die App
AudioAttributes#USAGE_ASSISTANT
undAudioAttributes#CONTENT_TYPE_SPEECH
als Audioattribute verwenden. - Während der Spracherkennung muss der Audiofokus mit
AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
angefordert werden. Beachten Sie, dass einige Medien-Apps möglicherweise nicht richtig auf Medienbefehle reagieren (siehe Ausführen von Medienbefehlen ), während ihr Audiofokus entfernt wird.