Android 6.0 Marshmallow introduit une nouvelle façon d'interagir avec les applications via l'Assistant telles que Google l'Assistant Google. L'assistant est une fenêtre de niveau supérieur que les utilisateurs peuvent afficher pour obtenir des actions pertinentes pour l'activité en cours. Ces actions peuvent inclure des liens profonds vers d'autres applications sur l'appareil.
Les utilisateurs activent l'Assistant en appuyant de manière prolongée sur le bouton d'accueil ou en disant un keyphrase. En réponse, le système ouvre une fenêtre de premier niveau qui affiche des informations contextuelles les actions pertinentes.
Une application d'assistant, comme l'Assistant Google, implémente la fenêtre de superposition de l'assistant via une fonctionnalité appelée Now on Tap, qui fonctionne avec la fonctionnalité de niveau plate-forme Android. Le système permet à l'utilisateur de sélectionner une application d'assistance, qui obtient des informations contextuelles de votre application à l'aide de API Assist d'Android
Ce guide explique comment les applications Android utilisent l'API Assist d'Android pour améliorer l'Assistant l'expérience utilisateur. Pour savoir comment créer une application multimédia afin que l'Assistant puisse la lancer et la contrôler, consultez Assistant Google et applications multimédias.
Utiliser les assistants
La figure 1 illustre une interaction type d'un utilisateur avec l'assistant. Lorsque l'utilisateur appuie de manière prolongée le bouton "Accueil", les rappels de l'API Assist sont appelés dans l'application source (étape 1). L'assistant affiche la fenêtre en superposition (étapes 2 et 3), puis l'utilisateur sélectionne l'action à effectuer. L'Assistant exécute l'action sélectionnée, par exemple en déclenchant un intent avec un lien profond vers l'application de restaurant (destination) (étape 4).
Les utilisateurs peuvent configurer l'assistant en sélectionnant Settings > Apps > Default Apps > Assist & voice input (Paramètres > Applications > Applications par défaut > Assistance et saisie vocale). Les utilisateurs peuvent modifier les options du système, contenu de l'écran sous forme de texte et accéder à une capture d'écran, comme illustré dans la figure 2.
Application source
Pour vous assurer que votre application fonctionne avec l'assistant en tant que source d'information pour l'utilisateur, il vous suffit de suivre les bonnes pratiques d'accessibilité pratiques. Cette section explique comment fournir des informations supplémentaires afin d'améliorer l'expérience utilisateur de l'assistant, ainsi que les scénarios qui nécessitent un traitement spécial, comme les vues personnalisées.
Partager des informations supplémentaires avec l'Assistant
En plus du texte et de la capture d'écran, votre application peut partager d'autres informations avec l'assistant. Par exemple, votre musique l'application peut choisir de transmettre les informations actuelles de l'album afin que l'Assistant puisse suggérer des actions plus intelligentes adaptées à l'activité en cours. Notez que les API Assist ne proposent pas de commandes multimédias. Pour ajouter des commandes multimédias, consultez Assistant Google et applications multimédias
Pour fournir des informations supplémentaires à l'Assistant, votre application fournit contexte global de l'application en enregistrant un écouteur d'applications. fournit des informations spécifiques à l'activité avec des rappels d'activité, comme indiqué dans Figure 3:
Pour fournir un contexte global, l'application crée une implémentation de
Application.OnProvideAssistDataListener
et l'enregistre
avec registerOnProvideAssistDataListener()
.
Pour fournir des informations contextuelles spécifiques à une activité, l'activité
remplace onProvideAssistData()
et onProvideAssistContent()
.
Les deux méthodes d'activité sont appelées après le paramètre global facultatif
est invoqué. Comme les rappels s'exécutent sur le thread principal, ils doivent
effectuer rapidement.
Les rappels ne sont appelés que lorsque l'activité est en cours d'exécution (running).
Fournir des éléments de contexte
Lorsque l'utilisateur active l'assistant,
onProvideAssistData()
est appelé pour créer un
ACTION_ASSIST
avec tout le contexte de l'intent
l'application actuelle représentée sous la forme d'une instance de AssistStructure
. Vous pouvez remplacer cette méthode pour placer
tous les éléments de votre choix dans le groupe
EXTRA_ASSIST_CONTEXT
de l'intent d'assistance.
Décrire du contenu
Votre application peut implémenter onProvideAssistContent()
pour améliorer l'expérience utilisateur de l'Assistant en fournissant des références liées au contenu de l'activité en cours. Vous pouvez décrire le contenu de l'application à l'aide des
vocabulaire commun défini par Schema.org
via un objet JSON-LD. Dans l'exemple ci-dessous, une application musicale fournit
des données structurées pour décrire l'album musical que l'utilisateur est actuellement
en cours d'affichage:
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); }
Vous pouvez également améliorer l'expérience utilisateur avec des implémentations personnalisées
onProvideAssistContent()
,
qui offre les avantages suivants:
- Ajuste le contenu fourni l'intention reflètent mieux le contexte général de l'activité.
- Fournit l'URI. du contenu affiché.
- Complète
setClipData()
avec des valeurs supplémentaires le contenu qui vous intéresse et que l'utilisateur est en train de consulter.
Remarque : Les applications qui utilisent une implémentation de sélection de texte personnalisée auront probablement besoin
pour implémenter onProvideAssistContent()
.
et appelez setClipData()
.
Implémentation par défaut
Si ni onProvideAssistData()
, ni onProvideAssistContent()
est implémenté, le système continue de transmettre l'appel
les informations collectées automatiquement à l'assistant, sauf si
est signalée comme sécurisée.
Comme le montre la figure 3, le système utilise les implémentations par défaut de onProvideStructure()
et onProvideVirtualStructure()
pour
de collecter du texte et d'afficher
des informations sur la hiérarchie. Si votre vue implémente des modèles
dessin textuel, remplacez onProvideStructure()
pour fournir
l'assistant avec le texte présenté à l'utilisateur en appelant setText(CharSequence)
.
Dans la plupart des cas, la prise en charge de l'accessibilité permet pour obtenir les informations dont il a besoin. Pour implémenter la prise en charge de l'accessibilité, suivez les bonnes pratiques décrites dans Faire en sorte que les applications soient accessibles, y compris les suivantes :
- Spécifiez les attributs
android:contentDescription
. - Renseignez
AccessibilityNodeInfo
pour les vues personnalisées. - Marque
assurez-vous que les objets
ViewGroup
personnalisés exposer à leurs enfants.
Sans les vues provenant des assistants
Pour gérer les informations sensibles, votre application peut exclure la vue actuelle de l'Assistant
en définissant le paramètre de mise en page FLAG_SECURE
de WindowManager
. Vous devez définir FLAG_SECURE
explicitement pour chaque fenêtre créée par l'activité, y compris les boîtes de dialogue. Votre application peut également utiliser setSecure()
pour exclure une surface de l'assistant. Il n'y a aucun
mécanisme global (au niveau de l'application) pour exclure toutes les vues de l'assistant. Remarque
que FLAG_SECURE
n'entraîne pas l'arrêt des rappels de l'API Assist
le déclenchement. L'activité qui utilise FLAG_SECURE
peut toujours explicitement
Fournir des informations à une application d'assistance à l'aide des rappels décrits précédemment
ce guide.
Remarque : Pour les comptes d'entreprise (Android for Work), l'administrateur peut désactiver la collecte des données de l'assistant pour le profil professionnel à l'aide de la méthode setScreenCaptureDisabled()
de l'API DevicePolicyManager
.
Interactions vocales
Les rappels de l'API Assist sont également invoqués expression clé de sécurité. Pour en savoir plus, consultez les Voix Actions.
Considérations relatives à l'ordre de plan
Un assistant utilise une fenêtre légère superposée activité en cours. Comme l'utilisateur peut activer l'assistant à tout moment, ne créez pas de d'alerte système qui interfèrent avec la fenêtre en superposition, comme illustré dans Figure 4.
Si votre application utilise d'alerte système, supprimez-les rapidement, car vous les laissez dégrade l'expérience utilisateur.
Application de destination
Les applications compatibles avec l'Assistant exploitent généralement les liens profonds pour trouver des applications de destination. Pour que votre application soit une application de destination potentielle, envisagez d'ajouter la prise en charge des liens profonds. La mise en correspondance entre le contexte utilisateur actuel et les liens profonds ou d'autres actions potentielles affichées dans (illustrée à l'étape 3 de la figure 1) est spécifique à l'implémentation de l'Assistant Google. Pour Par exemple, l'application Assistant Google utilise des liens profonds et des liens vers une application pour : générer du trafic vers les applications de destination.
Implémenter votre propre Assistant
Si vous le souhaitez, vous pouvez implémenter votre propre assistant. Comme le montre la Figure
2, l'utilisateur peut sélectionner l'application d'assistance active. La
l'application d'assistance doit fournir une implémentation de VoiceInteractionSessionService
et VoiceInteractionSession
, comme indiqué dans la section
VoiceInteraction
exemple. Elle nécessite également l'autorisation BIND_VOICE_INTERACTION
. L'Assistant peut alors
reçoivent la hiérarchie des textes et des vues représentées par une instance de AssistStructure
dans onHandleAssist()
.
Il reçoit la capture d'écran via onHandleScreenshot()
.