Android 6.0 Marshmallow presenta una nueva forma para que los usuarios interactúen con las apps a través del asistente aplicaciones, como la Google Asistente El asistente es una ventana de nivel superior que los usuarios pueden ver para obtener acciones relevantes para la actividad actual. Estas acciones pueden incluir vínculos directos a otras apps en el dispositivo.
Los usuarios pueden activar el Asistente manteniendo presionado el botón de inicio o diciendo un frase clave. En respuesta, el sistema abre una ventana de nivel superior que se muestra contextualmente acciones relevantes.
Una app de asistencia, como Asistente de Google, implementa la ventana superpuesta del Asistente a través de una llamada Now on Tap, que es compatible con la funcionalidad de nivel de plataforma de Android. El sistema permite al usuario seleccionar una aplicación del Asistente, que obtiene información contextual de tu aplicación mediante API de Assist de Android.
En esta guía, se explica cómo las apps para Android usan la API de Assist de Android para mejorar el asistente la experiencia del usuario. Aprende a crear una app de música para que Asistente pueda iniciar y control, consulta Asistente de Google y apps de música.
Cómo usar los asistentes
En la Figura 1 se ilustra una interacción típica entre el usuario y el Asistente. Cuando el usuario mantiene presionado el botón Inicio, se invocan las devoluciones de llamada de la API de Assist en la app source (paso 1). El asistente renderiza la ventana superpuesta (pasos 2 y 3). y, luego, el usuario selecciona la acción que va a realizar. El Asistente ejecuta la acción seleccionada. como activar un intent con un vínculo directo a la app del restaurante (destino) (paso 4).
![](https://developer.android.com/static/images/training/assistant/image01.png?authuser=9&hl=es)
Figura 1: Ejemplo de interacción del Asistente con la función Now on Tap de Google app
Para configurar el asistente, los usuarios deben seleccionar Configuración > Aplicaciones > Apps predeterminadas > Asistencia y entrada de voz. Los usuarios pueden cambiar las opciones del sistema, como acceder el contenido de la pantalla como texto y cómo acceder a una captura de pantalla, como se muestra en la Figura 2.
![](https://developer.android.com/static/images/training/assistant/image02.png?authuser=9&hl=es)
Figura 2: Configuración de asistencia y entrada de voz
App de origen
Para asegurarte de que tu app funcione con el Asistente como fuente de información para el usuario, solo debes seguir las prácticas recomendadas prácticas recomendadas. En esta sección, se describe cómo proporcionar información adicional para ayudar a mejorar la experiencia del usuario con el Asistente, así como las situaciones que necesitan un control especial, como vistas personalizadas.
Compartir información adicional con el Asistente
Además del texto y la captura de pantalla, tu app puede compartir otra información con el asistente. Por ejemplo, tu música la app puede pasar la información del álbum actual para que el asistente pueda sugerir acciones más inteligentes según la actividad actual. Ten en cuenta que las APIs de Assist no proporcionan controles multimedia. Para agregar controles multimedia, consulta Asistente de Google y apps de música.
Para proporcionarle información adicional al asistente, tu app brinda el contexto de aplicación global registrando un objeto de escucha de la app y proporciona información específica de la actividad con devoluciones de llamada de actividad, como se muestra en Figura 3:
![](https://developer.android.com/static/images/training/assistant/image03.png?authuser=9&hl=es)
Figura 3: Diagrama de la secuencia del ciclo de vida de la API de Assist
Para brindar un contexto de aplicación global, la app crea una implementación de
Application.OnProvideAssistDataListener
y lo registra.
usando registerOnProvideAssistDataListener()
.
Para proporcionar información contextual específica de la actividad, la actividad
anula onProvideAssistData()
y onProvideAssistContent()
.
Se llama a los dos métodos de actividad después de la búsqueda global opcional
se invoca la devolución de llamada. Debido a que las devoluciones de llamada se ejecutan en el subproceso principal, deben
completar de inmediato.
Las devoluciones de llamada se invocan solamente cuando la actividad se está ejecutando.
Cómo proporcionar contexto
Cuando el usuario activa el Asistente,
Se llama a onProvideAssistData()
para compilar un
El intent ACTION_ASSIST
con todo el contexto de la
aplicación actual representada como una instancia de AssistStructure
. Puedes anular este método para colocar
todo lo que quieras en el paquete para que aparezca en el
Es la parte EXTRA_ASSIST_CONTEXT
del intent de asistencia.
Cómo describir contenido
Tu app puede implementar onProvideAssistContent()
para mejorar la experiencia del usuario con el Asistente proporcionando referencias relacionadas con el contenido
relacionadas con la actividad actual. Puedes describir el contenido de la app usando el
vocabulario común definido por Schema.org
a través de un objeto JSON-LD. En el siguiente ejemplo, una app de música proporciona
Datos estructurados para describir el álbum de música que el usuario está en ese momento
viendo:
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); }
También puedes mejorar la experiencia del usuario con implementaciones personalizadas de
onProvideAssistContent()
,
lo que puede proporcionar los siguientes beneficios:
- Ajusta el contenido proporcionado. intent en reflejar mejor el contexto de nivel superior de la actividad.
- Proporciona el URI del contenido que se muestra.
- Completa
setClipData()
con datos adicionales el contenido de interés que el usuario ve en ese momento.
Nota: Es probable que las apps que usan una implementación de selección de texto personalizada necesiten
para implementar onProvideAssistContent()
y llama a setClipData()
.
Implementación predeterminada
Si ni onProvideAssistData()
ni onProvideAssistContent()
se implementa la devolución de llamada, el sistema continúa y pasa
información recopilada automáticamente al Asistente, a menos que el estado
ventana se marca como segura.
Como se muestra en la Figura 3, el sistema usa las implementaciones predeterminadas de onProvideStructure()
y onProvideVirtualStructure()
para
recopilar texto y ver información de jerarquía. Si tu vista implementa
dibujo de texto, anula onProvideStructure()
para proporcionar
el asistente con el texto que se muestra al usuario llamando a setText(CharSequence)
.
En la mayoría de los casos, implementar la asistencia de accesibilidad para obtener la información que necesita. Para implementar la asistencia de accesibilidad, sigue las prácticas recomendadas descritas en Creación de aplicaciones Accesible, que incluye lo siguiente:
- Proporciona los atributos
android:contentDescription
. - Propaga
AccessibilityNodeInfo
para vistas personalizadas. - Marca
asegúrate de que los objetos
ViewGroup
personalizados se hayan exposición a sus hijos o hijas.
Cómo excluir vistas de los asistentes
Para controlar información sensible, tu app puede excluir la vista actual del Asistente
estableciendo el parámetro de diseño FLAG_SECURE
de WindowManager
Debes configurar FLAG_SECURE
de forma explícita para
cada ventana creada por la actividad, incluidos los diálogos. Tu app también puede usar
setSecure()
para excluir
una superficie desde el Asistente. No hay
mecanismo global (a nivel de la app) para excluir todas las vistas del Asistente Nota
que FLAG_SECURE
no haga que se detengan las devoluciones de llamada de la API de Assist
se activa. La actividad que usa FLAG_SECURE
aún puede explícitamente
proporcionar información a una aplicación de asistencia mediante las devoluciones de llamada descritas anteriormente
en esta guía.
Nota: Para cuentas empresariales (Android for Work),
el administrador puede inhabilitar
la recopilación de datos del asistente para el perfil de trabajo con el método setScreenCaptureDisabled()
de la API de DevicePolicyManager
Interacciones de voz
Las devoluciones de llamada de la API de Assist también se invocan frase clave detección temprana de errores. Para obtener más información, consulta la Voz Actions.
Consideraciones del orden Z
Un asistente utiliza una ligera ventana superpuesta que se muestra en la parte superior de la actividad actual. Como el usuario puede activar el asistente en cualquier momento, no crear permanentes de alerta del sistema que interfieren con la ventana superpuesta, como se muestra en Figura 4:
![](https://developer.android.com/static/images/training/assistant/image04.png?authuser=9&hl=es)
Figura 4: Capa de orden Z del Asistente
Si tu aplicación utiliza del sistema, quítalas de inmediato porque las dejas en la pantalla degrada la experiencia del usuario.
App de destino
Por lo general, las apps del Asistente aprovechan los vínculos directos para encontrar apps de destino. Para que tu app como una posible app de destino, considera agregar compatibilidad con vínculos directos. La coincidencia entre el contexto del usuario actual y los vínculos directos u otras posibles acciones que se muestran en el ventana superpuesta (que se muestra en el paso 3 de la Figura 1) es específica de la implementación del Asistente de Google. Para ejemplo, la app del Asistente de Google usa vínculos directos y vínculos de apps para hacer lo siguiente: dirigir el tráfico a las apps de destino.
Cómo implementar tu propio Asistente
Es posible que quieras implementar tu propio Asistente. Como se muestra en la figura
2, el usuario puede seleccionar la app de Asistente activa. El
La app del Asistente debe proporcionar una implementación de VoiceInteractionSessionService
y VoiceInteractionSession
, como se muestra en .
este VoiceInteraction
ejemplo. También requiere el permiso BIND_VOICE_INTERACTION
. Luego, el asistente puede
recibir el texto y la jerarquía de vistas representados como una instancia de AssistStructure
en onHandleAssist()
.
Recibe la captura de pantalla a través de onHandleScreenshot()
.