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).
 
  Abbildung 1. Beispiel für die Assistant-Interaktion mit der Now on Tap-Funktion von die Google App
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.
 
  Abbildung 2. Assistenz und Einstellungen für Spracheingabe
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:
 
  Abbildung 3. Sequenzdiagramm des Lebenszyklus der Assist API
  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 AccessibilityNodeInfofü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:
 
  Abbildung 4. Z-Reihenfolge der unterstützenden Ebene
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.
