Implementar hápticos

Los fabricantes de dispositivos generalmente se consideran 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 dedica a la coherencia 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 la aplicación. Entonces, si las API hápticas funcionan en algunos teléfonos Android pero no en otros, el resultado es un ecosistema inconsistente. Es por eso que la configuración del hardware juega un papel fundamental para garantizar que los fabricantes puedan implementar 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 conocimiento común entre fabricantes y desarrolladores de dispositivos, lo cual 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. Generación de conocimiento entre fabricantes y desarrolladores de dispositivos

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

  1. Implementar constantes

    • Lista de constantes para implementar hápticos.
  2. Mapear constantes entre HAL y API

    • Recomendaciones de mapeo entre constantes de API públicas ( marcadores de posición denominados en el marco) y constantes HAL, que implementan los marcadores de posición.
    • Consulte Principios de diseño para guiar el mapeo recomendado para obtener más información sobre este proceso.
  3. Evaluar el hardware

    • Instrucciones sobre los efectos hápticos del objetivo. Utilice estas instrucciones para realizar comprobaciones rápidas en 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 de hápticos.

Figura 2. Efectos de implementación

Diagrama de flujo de pasos para implementar primitivas.

Figura 3. Implementación de primitivas

Verifique 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 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 llamadas mediante createPredefined() .
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD VibrationEffect.Composition Clase de composición
Las constantes hápticas en VibrationEffect.Composition pueden tener una intensidad escalable, que se llama mediante addPrimitive(int primitiveId, float scale, int delay) .

Las vibraciones alternativas que se describen a continuación se realizan en dispositivos que no implementan 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 asignaciones recomendadas entre constantes HAL públicas y constantes API. Si el hardware evaluado en el Paso 1 no implementa las constantes HAL, entonces se debe utilizar el Paso 2 para actualizar los patrones de respaldo descritos en el Paso 1 para generar resultados similares. El mapeo está asistido por dos modelos predeterminados diferentes.

  • Modelo discreto (simple)

    • La amplitud es la variable clave de este modelo. Cada entidad en 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 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 utilizar UX háptico avanzado con VibrationEffect.Composition (para el mejor uso de las API hápticas más recientes), se recomienda implementar su hardware utilizando este modelo.

modelo discreto

Se recomienda asignar todas las constantes públicas proporcionadas en la API con constantes HAL apropiadas. Para comenzar este proceso, descubra cuántas formas de onda hápticas con amplitud discreta puede definir el dispositivo en HAL. Una pregunta específica estructurada en torno a esa noción es la siguiente: ¿Cuántos efectos hápticos de un solo impulso con diferencias de amplitud perceptibles por el ser humano 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 básico podría tener sólo las capacidades de hardware para producir una única 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 HAL. El mapeo constante HAL-API toma la constante HAL (usando la amplitud media como línea de base) y luego organiza 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 constante API de impulso único en hasta tres grupos discretos de niveles de amplitud. La forma en que se segmentan las constantes de API se basa en principios de UX para acompañar los eventos de entrada. Para obtener más información, consulte Diseño Haptics UX .

Modelo discreto para mapeo constante HAL-API

Figura 6. Mapeo constante HAL-API: modelo discreto

Si su dispositivo admite solo dos constantes HAL con amplitudes discretas, considere fusionar 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 asigna para definir constantes API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) como se muestra en la figura 7. Al utilizar 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 cuántas texturas hápticas diferentes desean proporcionar.

Rango constante HAL por textura y amplitud.

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

Modelo continuo para mapeo constante HAL-API

Figura 8. Mapeo constante 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

Variación creciente 2

Figura 9. Variación creciente con escalabilidad de amplitud

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 float scale cuando la constante API se declara mediante addPrimitive(int primitiveID, float scale, int delay) . PRIMITIVE_TICK y PRIMITIVE_CLICK se pueden diseñar con una distinción clara 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 de hardware implica definir tres efectos hápticos, denominados 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 denominador común en el mapeo HAL-API proporcionado en el Paso 2. Está mapeado con el efecto más utilizado, HapticFeedbackConstants.KEYBOARD_PRESS . La evaluación de este efecto ayuda a determinar si el dispositivo objetivo está preparado para una sensación táctil clara .

Efecto 2: efecto háptico personalizado corto

La constante VibrationEffect.createOneShot(20,255) es para efectos hápticos personalizados. Para impulsos personalizados cortos y ú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 un 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 lograr hápticos ricos . Los timings [] y amplitudes [] recomendados son {500, 500} y {128, 255} , respectivamente, lo 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 del hardware de 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 evaluación subjetiva del efecto háptico.

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

Realizar una evaluación subjetiva

Para comprobar rápidamente 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 los humanos.

Una pregunta específica estructurada en torno a esta noción es la siguiente: ¿Puede el dispositivo producir efectos hápticos fácilmente perceptibles para los usuarios como se esperaba? Responder a esta pregunta le ayuda a evitar hápticos fallidos , incluidos hápticos imperceptibles que los usuarios no pueden sentir o hápticos no deseados en los que las formas de onda no producen patrones como se esperaba.