Kontextinhalt für Assistant optimieren

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:

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:

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.