Android 6.0 Marshmallow bietet Nutzern eine neue Möglichkeit, über den Assistenten mit Apps zu interagieren Apps wie die Google Assistant Der Assistent ist ein Fenster auf oberster Ebene, das Nutzer aufrufen können, um Aktionen für die aktuelle Aktivität. Solche Aktionen können beispielsweise Deeplinks zu anderen Apps auf auf dem Gerät.
Nutzer aktivieren den Assistenten durch langes Drücken der Startbildschirmtaste oder durch Sprechen eines keyphrase enthalten. Daraufhin öffnet das System ein Fenster auf oberster Ebene, relevante Aktionen durchführen.
Eine Assistent-App, z. B. Google Assistant, implementiert das Assistant-Overlay-Fenster über eine „Now on Tap“, die mit der Android-Funktion auf Plattformebene funktioniert. Das System können Nutzer eine Assistent-App auswählen, die mithilfe von Die Assist API von Android
In diesem Leitfaden wird erläutert, wie Android-Apps die Assist API von Android verwenden, um den Assistenten zu verbessern. User Experience aus. Um zu erfahren, wie du eine Medien-App erstellst, damit Assistant starten kann finden Sie unter Google Assistant und Medien-Apps.
Assistant verwenden
Abbildung 1 zeigt eine typische Nutzerinteraktion mit dem Assistenten. Wenn der Nutzer lange auf auf die Schaltfläche für die Startseite klicken, werden Callbacks der Assist API aufgerufen, in der Quell-App (Schritt 1). Der Assistent rendert das Overlay-Fenster (Schritte 2 und 3). und wählt die auszuführende Aktion aus. Der Assistent führt die ausgewählte Aktion aus, Sie können beispielsweise einen Intent mit einem Deeplink zur Restaurant-App (Ziel) auslösen (Schritt 4).
Nutzer können den Assistenten über Einstellungen > Apps > Standard-Apps > Assistenz und Spracheingabe. Nutzer können Systemoptionen ändern, z. B. den Zugriff auf Bildschirminhalt als Text und Zugriff auf einen Screenshot, wie in Abbildung 2 dargestellt.
Quell-App
Damit deine App mit Assistant als Informationsquelle für den Nutzer funktioniert, benötigen Sie nur die Barrierefreiheit im Internet . In diesem Abschnitt wird beschrieben, wie Sie zusätzliche Informationen angeben. um die Nutzung von Assistant und verschiedene Szenarien zu verbessern die eine besondere Verarbeitung erfordern, z. B. benutzerdefinierte Ansichten.
Zusätzliche Informationen teilen mit dem Assistenten
Zusätzlich zum Text und dem Screenshot kann Ihre App andere Informationen an den Assistenten senden. Zum Beispiel Ihre Musik ob die App aktuelle Albuminformationen weitergeben kann, damit der Assistent schlagen intelligentere Aktionen vor, die auf die aktuelle Aktivität zugeschnitten sind. Die Assist APIs bieten keine Mediensteuerelemente. Um Mediensteuerelemente hinzuzufügen, siehe Google Assistant und Medien-Apps.
Um dem Assistenten zusätzliche Informationen zur Verfügung zu stellen, bietet deine App globalen Anwendungskontext durch Registrieren eines App-Listeners und stellt aktivitätsspezifische Informationen mit Aktivitäts-Callbacks bereit, wie in Abbildung 3:
Um globalen Anwendungskontext bereitzustellen, erstellt die App eine
Application.OnProvideAssistDataListener
und registriert es
mit registerOnProvideAssistDataListener()
.
Um aktivitätsspezifische Kontextinformationen bereitzustellen, enthält die Aktivität
überschreibt onProvideAssistData()
und onProvideAssistContent()
.
Die beiden Aktivitätsmethoden werden nach dem optionalen globalen
aufgerufen wird. Da die Callbacks im Hauptthread ausgeführt werden, sollten sie
sofort abschließen.
Die Callbacks werden nur aufgerufen, wenn die Aktivität wird ausgeführt.
Kontext bieten
Wenn der Nutzer den Assistenten aktiviert,
onProvideAssistData()
wird aufgerufen, um eine vollständige
ACTION_ASSIST
Intent mit dem gesamten Kontext des
Aktuelle Anwendung, dargestellt als Instanz von AssistStructure
. Sie können diese Methode überschreiben,
in das Set ein, das in der
EXTRA_ASSIST_CONTEXT
als Teil des Unterstützungs-Intents.
Inhalte beschreiben
Deine App kann onProvideAssistContent()
implementieren
zur Verbesserung der Assistant-Nutzererfahrung durch inhaltsbezogene Referenzen
die mit der aktuellen Aktivität in Zusammenhang stehen. Sie können die App-Inhalte mithilfe der
allgemeines Vokabular, definiert auf Schema.org
JSON-LD-Objekt zu erstellen. Im Beispiel unten bietet eine Musik-App
Strukturierte Daten zur Beschreibung des aktuellen Musikalbums
Ansicht:
Kotlin
override fun onProvideAssistContent(assistContent: AssistContent) { super.onProvideAssistContent(assistContent) val structuredJson: String = JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString() assistContent.structuredData = structuredJson }
Java
@Override public void onProvideAssistContent(AssistContent assistContent) { super.onProvideAssistContent(assistContent); String structuredJson = new JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString(); assistContent.setStructuredData(structuredJson); }
Sie können die Nutzererfahrung auch mit benutzerdefinierten Implementierungen von
onProvideAssistContent()
,
Dies kann folgende Vorteile bieten:
- <ph type="x-smartling-placeholder"></ph> Passt den bereitgestellten Inhalt an den Kontext der Aktivität auf oberster Ebene besser abzubilden.
- <ph type="x-smartling-placeholder"></ph> Stellt den URI bereit. des angezeigten Inhalts.
- Füllt
setClipData()
mit weiteren Content, den sich der Nutzer gerade ansieht.
Hinweis : Apps, in denen eine benutzerdefinierte Textauswahl implementiert wird, benötigen
zur Implementierung von onProvideAssistContent()
und rufe setClipData()
an.
Standardimplementierung
Wenn weder der onProvideAssistData()
noch der onProvideAssistContent()
implementiert ist, fährt das System fort und übergibt
automatisch gesammelte Informationen an den Assistenten, es sei denn, die aktuellen
Fenster als sicher gekennzeichnet.
Wie in Abbildung 3 dargestellt, verwendet das System die Standardimplementierungen von onProvideStructure()
und onProvideVirtualStructure()
, um
Text zu sammeln und Hierarchieinformationen anzuzeigen. Wenn in der Ansicht benutzerdefinierte
Textzeichnung, überschreiben Sie onProvideStructure()
, um
Assistant mit dem Text, der dem Nutzer durch Aufrufen von setText(CharSequence)
angezeigt wird.
In den meisten Fällen ermöglicht die Implementierung von um die benötigten Informationen zu erhalten. Um die Unterstützung für Barrierefreiheit zu implementieren, die Best Practices unter Anwendungen erstellen Barrierefrei, einschließlich der folgenden:
- Geben Sie
android:contentDescription
-Attribute an. - Füllen Sie
AccessibilityNodeInfo
für benutzerdefinierte Ansichten aus. - Marke
dass die benutzerdefinierten
ViewGroup
-Objekte offenlegen ihre Kinder.
Aufrufe von Assistenten ausschließen
Um vertrauliche Informationen zu verarbeiten, kann deine App die aktuelle Ansicht vom Assistenten ausschließen
indem Sie den Layoutparameter FLAG_SECURE
von WindowManager
festlegen. Sie müssen FLAG_SECURE
explizit festlegen für
jedes von der Aktivität erstellte Fenster, einschließlich Dialogfeldern. Deine App kann auch
Auszuschließende setSecure()
als Oberfläche des Assistenten. Es gibt keine
globalen Mechanismus (auf App-Ebene), um alle Aufrufe vom Assistenten auszuschließen. Hinweis
FLAG_SECURE
bewirkt nicht, dass die Assist API-Callbacks beendet werden.
Auslösung. Die Aktivität, die FLAG_SECURE
verwendet, kann
einer Assistant-App mithilfe der zuvor beschriebenen Rückrufe Informationen zur Verfügung stellen.
dieses Leitfadens.
Hinweis : Für Arbeitskonten (Android for Work)
kann der Administrator die
Die Erhebung von Assistant-Daten für das Arbeitsprofil mit der Methode setScreenCaptureDisabled()
der DevicePolicyManager
API.
Sprachinteraktionen
Assist API-Rückrufe werden auch auf folgenden Seiten aufgerufen: Keyphrase -Erkennung. Weitere Informationen finden Sie in der Google Voice Dokumentation zu Aktionen.
Überlegungen zur Z-Reihenfolge
Ein Assistent verwendet ein einfaches Overlay-Fenster, aktuelle Aktivität. Da der Nutzer den Assistenten jederzeit aktivieren kann, Keine dauerhaften erstellen Systemwarnungsfenster, die das Overlay-Fenster beeinträchtigen (siehe Abbildung 4:
Wenn Ihre App verwendet Systembenachrichtigungsfenster öffnen, entfernen Sie sie unverzüglich, die Nutzererfahrung beeinträchtigen.
Ziel-App
Assistant-Apps nutzen in der Regel Deeplinks, um Ziel-Apps zu finden. Damit Ihr eine potenzielle Ziel-App darstellen, sollten Sie Deeplinks in Betracht ziehen. Die Übereinstimmung zwischen dem aktuellen Nutzerkontext und den Deeplinks oder anderen Overlay-Fenster (in Schritt 3 in Abbildung 1 gezeigt) ist spezifisch für die Implementierung von Google Assistant. Für Beispiel: Die Google Assistant App nutzt Deeplinks und App-Links, um Traffic zu Ziel-Apps zu leiten.
Eigenen Assistenten implementieren
Sie können Ihren eigenen Assistenten implementieren. Wie in Abbildung
2 kann der Nutzer die aktive Assistenten-App auswählen. Die
Die Assistant-App muss eine Implementierung von VoiceInteractionSessionService
und VoiceInteractionSession
bieten, wie in gezeigt.
dieses VoiceInteraction
-Beispiel. Außerdem ist die Berechtigung BIND_VOICE_INTERACTION
erforderlich. Der Assistent kann dann
die Text- und Ansichtshierarchie erhalten, die als Instanz von AssistStructure
in onHandleAssist()
dargestellt wird.
Der Screenshot wird über onHandleScreenshot()
empfangen.