Implementando Haptics

Los fabricantes de dispositivos generalmente se consideran los propietarios de los activos privados creados para cada dispositivo. Como tal, sus esfuerzos de ingeniería a menudo se centran en cada dispositivo ; poco o ningún esfuerzo se destina a la consistencia de otros dispositivos en el ecosistema.

En contraste directo, los desarrolladores se esfuerzan por crear aplicaciones que funcionen en todos los teléfonos Android del ecosistema, independientemente de las especificaciones técnicas de cada dispositivo. Esta diferencia de enfoque puede causar un problema de fragmentación, por ejemplo, las capacidades de hardware de ciertos teléfonos no coinciden con las expectativas establecidas por los desarrolladores de aplicaciones. Entonces, si las API hápticas funcionan en algunos teléfonos Android pero no en otros, el resultado es un ecosistema inconsistente. Esta es la razón por la que la configuración del hardware juega un papel fundamental para garantizar que los fabricantes puedan implementar las API hápticas de Android en todos los dispositivos.

Esta página proporciona una lista de verificación paso a paso para configurar el cumplimiento del hardware para el mejor uso de las API hápticas de Android.

La siguiente figura ilustra la creación de conocimientos comunes entre los fabricantes y desarrolladores de dispositivos, que es un paso fundamental para crear un ecosistema cohesivo.

Diagrama de casos de uso de hápticos para desarrolladores de aplicaciones y fabricantes de dispositivos

Figura 1. Construyendo conocimiento entre fabricantes y desarrolladores de dispositivos

Lista de verificación de implementación de hápticos

  1. Implementar constantes

    • Lista de constantes para implementar hápticas.
  2. Asignar constantes entre HAL y API

  3. Evaluar el hardware

    • Instrucciones sobre los efectos hápticos de destino. Utilice estas instrucciones para realizar comprobaciones rápidas de su hardware.

Exploraremos cada uno de estos pasos con mayor detalle a continuación.

Paso 1: Implementar constantes

Realice estas comprobaciones para determinar si su dispositivo cumple con los requisitos mínimos para implementar hápticos.

Diagrama de flujo del proceso de implementación háptica

Figura 2. Efectos de implementación

Diagrama de flujo de pasos para implementar primitivas

Figura 3. Implementando primitivas

Compruebe el estado de implementación de las siguientes constantes hápticas.

constantes hápticas Ubicaciones y resúmenes
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK Clase de efecto de VibrationEffect
Las constantes hápticas en VibrationEffect no incluyen ninguna noción de eventos de entrada y no tienen elementos de interfaz de usuario. En cambio, las constantes incluyen la noción de niveles de energía, como EFFECT_CLICK y EFFECT_HEAVY_CLICK , que son llamados por createPredefined() .
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD Clase VibrationEffect.Composition
Se permite que las constantes hápticas en VibrationEffect.Composition tengan una intensidad escalable, a las que llama addPrimitive(int primitiveId, float scale, int delay) .

Las vibraciones alternativas que se describen a continuación se realizarán en dispositivos que no implementen las constantes VibrationEffect . Se recomienda actualizar estas configuraciones para que funcionen mejor en dichos dispositivos.

  1. EFFECT_CLICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos configurados en frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern .

  2. EFFECT_HEAVY_CLICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos configurados en frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos (0, 30, 100, 30).

  4. EFFECT_TICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos configurados en frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Diagrama de flujo de pasos para probar la retroalimentación háptica

Figura 4. Implementación de constantes de retroalimentación

Verifique el estado de las siguientes constantes de comentarios públicos.

constantes hápticas Ubicaciones y resúmenes

CLOCK_TICK , CONTEXT_CLICK , KEYBOARD_PRESS , KEYBOARD_RELEASE , KEYBOARD_TAP , LONG_PRESS , TEXT_HANDLE_MOVE , VIRTUAL_KEY , VIRTUAL_KEY_RELEASE , CONFIRM , REJECT , GESTURE_START , GESTURE_END

Clase HapticFeedbackConstants
Las constantes hápticas en HapticFeedbackConstants ayudan a los eventos de entrada con ciertos elementos de la interfaz de usuario, como KEYBOARD_PRESS y KEYBOARD_RELEASE , que son llamados por performHapticFeedback() .

Paso 2: Asigne constantes entre HAL y API

El paso 2 presenta las asignaciones recomendadas entre las constantes HAL públicas y las constantes API. Si el hardware evaluado en el Paso 1 no implementa las constantes HAL, entonces se debe usar el Paso 2 para actualizar los patrones de respaldo descritos en el Paso 1 para generar salidas similares. El mapeo es asistido por dos modelos predeterminados diferentes.

  • Modelo discreto (simple)

    • La amplitud es la variable clave de este modelo. Cada entidad en el HAL representa una amplitud háptica diferente.
    • Este modelo es un requisito mínimo necesario para implementar la UX háptica básica.
    • Una UX háptica más avanzada requiere hardware avanzado y un modelo avanzado (modelo continuo).
  • Modelo continuo (avanzado)

    • La textura y la amplitud son las variables clave de este modelo. Cada entidad en el HAL representa diferentes texturas hápticas. La amplitud de cada entidad HAL está controlada por el factor de escala ( S ).
    • Este modelo requiere hardware avanzado. Si los OEM desean usar UX háptica avanzada con VibrationEffect.Composition (para el mejor uso de las API hápticas más recientes), se recomienda implementar su hardware con este modelo.

modelo discreto

Se recomienda mapear todas las constantes públicas proporcionadas en la API con constantes HAL apropiadas. Para comenzar este proceso, averigüe cuántas formas de onda hápticas con amplitud discreta puede definir el dispositivo en el HAL. Una pregunta específica estructurada en torno a esa noción se ve así: ¿Cuántos efectos hápticos de un solo impulso con diferencias de amplitud perceptibles por humanos se pueden definir en mi teléfono? La respuesta a esta pregunta determina el mapeo.

La definición de constantes HAL es un proceso que depende del hardware. Por ejemplo, un teléfono de nivel de entrada puede tener solo las capacidades de hardware para producir una sola forma de onda háptica. Los dispositivos con componentes de hardware más avanzados producen una gama más amplia de niveles de amplitud discretos y pueden definir múltiples formas de onda hápticas en la HAL. El mapeo constante HAL-API toma la constante HAL (usando la amplitud media como línea de base), luego organiza los efectos más fuertes o más débiles a partir de ahí.

Diagrama de rango constante HAL y amplitudes de retroalimentación

Figura 5. Rango constante HAL por amplitud

Cuando se define la cantidad de constantes HAL con amplitud discreta, es hora de asignar las constantes HAL y API por la cantidad de constantes HAL. Este proceso de mapeo puede segmentar una sola constante API de impulso en hasta tres grupos discretos de niveles de amplitud. La forma en que se segmentan las constantes de la API se basa en los principios de UX para acompañar los eventos de entrada. Para obtener más información, consulte Diseño de experiencia de usuario háptica.

Modelo discreto para mapeo constante HAL-API

Figura 6. Mapeo de constantes HAL-API: modelo discreto

Si su dispositivo solo admite dos constantes HAL con amplitudes discretas, considere combinar las constantes HAL de nivel de amplitud media y alta. Un ejemplo de esta noción en la práctica sería asignar EFFECT_CLICK y EFFECT_HEAVY_CLICK a la misma constante HAL, que sería la constante HAL de nivel de amplitud media. Si su dispositivo admite solo una constante HAL con amplitud discreta, considere fusionar los tres niveles en uno.

modelo continuo

El modelo continuo con escalabilidad de amplitud se puede aplicar para definir constantes HAL. Se puede aplicar un factor de escala ( S ) a las constantes HAL (por ejemplo, HAL_H0 , HAL_H1 ) para producir el HAL escalado ( HAL_H0 x S ). En este caso, el HAL escalado se mapea para definir constantes API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) como se muestra en la figura 7. Al usar la escalabilidad de amplitud del modelo continuo, un dispositivo puede almacenar una pequeña cantidad de constantes HAL con texturas distintivas y agregue variaciones de amplitud ajustando el factor de escala ( S ). Los fabricantes de dispositivos pueden definir la cantidad de constantes HAL en función de la cantidad de texturas hápticas diferentes que desean proporcionar.

Rango constante HAL por textura y amplitud

Figura 7. Rango constante HAL por textura (HAL_H0) y escala de amplitud (S)

Modelo continuo para mapeo constante HAL-API

Figura 8. Mapeo de constantes HAL-API: modelo continuo

En el modelo continuo, diferentes constantes HAL representan diferentes texturas hápticas en lugar de diferentes amplitudes; el factor de escala ( S ) puede configurar la amplitud. Sin embargo, debido a que la percepción de la textura (por ejemplo, la nitidez) está relacionada con la percepción de la duración y la amplitud, se recomienda combinar la textura y el factor de escala (en el proceso de diseño del mapeo HAL-API).

La Figura 7 ilustra el mapeo constante aumentando la variación de un HAL a muchas constantes API con escalabilidad de amplitud.

Variación creciente 1

Varación creciente 2

Figura 9. Variación creciente con escalabilidad de amplitud

Nota: la figura anterior ilustra una instancia específica de asignación constante, por lo que las convenciones de nomenclatura son hipotéticas. La realización de este proceso es única para cada fabricante de dispositivos.

Para todas las constantes API escalables, como PRIMITIVE_TICK y PRIMITIVE_CLICK en VibrationEffect.Composition , el nivel de energía de la constante API depende del parámetro de float scale cuando la constante API se declara a través addPrimitive(int primitiveID, float scale, int delay) . PRIMITIVE_TICK y PRIMITIVE_CLICK se pueden diseñar con una clara distinción mediante el uso de diferentes constantes HAL. Se recomienda este enfoque si desea agregar variación a la textura .

Paso 3: evaluar el hardware

La evaluación del hardware implica definir tres efectos hápticos, etiquetados Efectos 1, 2 y 3 para esta evaluación específica.

Efecto 1: constantes hápticas cortas predefinidas

La constante VibrationEffect.EFFECT_CLICK es el efecto de referencia o el denominador común en la asignación de HAL-API proporcionada en el paso 2. Está asignada con el efecto más utilizado, HapticFeedbackConstants.KEYBOARD_PRESS . Evaluar este efecto ayuda a determinar la preparación de su dispositivo de destino para hápticos claros .

Efecto 2: efecto háptico personalizado corto

La constante VibrationEffect.createOneShot(20,255) es para efectos hápticos personalizados. Para impulsos cortos personalizados únicos, 20 ms es el umbral máximo recomendado para definir la duración. No se recomienda un solo impulso de más de 20 ms porque se percibe como una vibración de zumbido .

Forma de onda de efecto háptico personalizado corto

Figura 10. Efecto háptico personalizado corto

Efecto 3: efecto háptico personalizado largo con variación de amplitud

La constante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) es para efectos personalizados largos con variación de amplitud. La capacidad de producir amplitudes variables para efectos hápticos personalizados es uno de los indicadores para evaluar las capacidades del dispositivo para hápticos ricos . Los timings [] y amplitudes [] recomendados son {500, 500} y {128, 255} , respectivamente, que presenta una tendencia creciente de amplitud del 50 % al 100 %, con una frecuencia de muestreo de 500 ms.

Forma de onda de efecto háptico con variación de amplitud

Figura 11. Efecto háptico personalizado largo con variación de amplitud

Para verificar las capacidades de hardware del control de amplitud para el Efecto 3, use el método Vibrator.hasAmplitudeControl() . El resultado debe ser true para ejecutar VibrationEffect.createWaveform con amplitud variable según lo previsto.

Diagrama de flujo de la evaluación del efecto háptico subjetivo

Figura 12. Evaluación del sujeto del efecto háptico 1, 2 y 3

Realización de una evaluación subjetiva

Para una verificación rápida de la coherencia, realice primero una evaluación subjetiva. El objetivo de la evaluación subjetiva es observar la amplitud de los efectos hápticos para determinar si el dispositivo puede generar hápticos con amplitudes perceptibles por humanos.

Una pregunta específica estructurada en torno a esta noción se ve así: ¿Puede el dispositivo producir efectos hápticos fácilmente perceptibles para los usuarios como se esperaba? Responder a esta pregunta lo ayuda a evitar hápticas fallidas , incluidas hápticas imperceptibles que los usuarios no pueden sentir, o hápticas no deseadas en las que las formas de onda no producen patrones según lo previsto.