Referencia de la API de tecnología táctil de Android

En esta sección, se ofrece una introducción a las diversas APIs de tecnología táctil disponibles en Android. También abarca cuándo y cómo comprobar la compatibilidad del dispositivo necesaria para garantizar que los efectos táctiles se reproduzcan como deseas.

Existen varias formas diferentes de crear efectos táctiles, y es importante tener en cuenta los principios de diseño de la tecnología táctil de Android cuando elijas una de ellas. En la siguiente tabla, se resumen estos atributos de alto nivel de cada enfoque:

  • La disponibilidad es particularmente importante cuando se planifica el resguardo de comportamiento y debe combinarse con la verificación de la compatibilidad de dispositivos individuales.
  • La háptica táctil brinda sensaciones nítidas y limpias que son menos molestas para los usuarios.
  • La tecnología háptica enriquecida tiene una mayor expresividad y, a menudo, requiere hardware con más funciones.
Plataforma de la API Disponibilidad Tecnología háptica clara Tecnología táctil enriquecida
HapticFeedbackConstants Android 1.5 y versiones posteriores
(por constante)
VibrationEffect predefinido Android 10 y versiones posteriores
Composición de VibrationEffect Android 11 y versiones posteriores (por constante)
Vibraciones de activación/desactivación, en un solo intento y con forma de onda Android 1

Además, las APIs de notificaciones, que se describen en esta página, te permiten personalizar los efectos táctiles que se reproducen para las notificaciones entrantes.

En esta página, también se describen conceptos adicionales que abarcan las plataformas de la API:

HapticFeedbackConstants

La clase HapticFeedbackConstants proporciona constantes basadas en acciones para permitir que las apps agreguen respuestas táctiles que sean coherentes en toda la experiencia del dispositivo, en lugar de que cada app tenga efectos diferentes para acciones comunes.

Compatibilidad y requisitos

El uso del método View.performHapticFeedback con estas constantes no requiere ningún permiso especial para la app. Está sujeto a la propiedad View.hapticFeedbackEnabled, que, si se establece en false, inhabilitará todas las llamadas de respuesta táctil en la vista, incluidas las predeterminadas.La configuración principal relacionada, la propiedad View.hapticFeedbackEnabled, que si se establece en false inhabilitará todas las llamadas de respuesta táctil en la vista, incluidas las predeterminadas. El método también respeta la configuración del sistema del usuario para habilitar la respuesta táctil.

La única consideración de compatibilidad es el nivel de SDK de la constante específica para la acción.

No es necesario proporcionar un comportamiento de resguardo cuando se usa HapticFeedbackConstants.

Uso de HapticsFeedbackConstants

Para obtener detalles sobre el uso de HapticFeedbackConstants, consulta Cómo agregar respuesta táctil a los eventos.

VibrationEffect predefinido

La clase VibrationEffect proporciona varias constantes predefinidas, como CLICK, TICK y DOUBLE_CLICK. Es posible que estos efectos se optimicen para el dispositivo.

Compatibilidad y requisitos

Para reproducir cualquier VibrationEffect, se requiere el permiso VIBRATE en el manifiesto de la app.

No es necesario proporcionar un comportamiento de resguardo cuando se usa VibrationEffect predefinido, ya que las constantes que no tienen una implementación optimizada para el dispositivo se revierten a un resguardo estándar de la plataforma.

Las APIs de Vibrator.areEffectsSupported y Vibrator.areAllEffectsSupported sirven para determinar si hay una implementación optimizada para el dispositivo. Los efectos predefinidos aún se pueden usar sin una implementación optimizada y usan el resguardo estándar de la plataforma. En consecuencia, estas APIs de areEffectsSupported solo son necesarias si una aplicación quiere tener en cuenta si el efecto está optimizado para el dispositivo o no.

Los métodos de comprobación de efectos pueden mostrar uno de estos tres valores:

Como el valor UNKNOWN indica que la API de verificación no está disponible, por lo general, se muestra para todos los efectos o ninguno. Estos dispositivos recurren de forma dinámica.

Uso de VibrationEffect predefinido

Para obtener detalles sobre el uso de un VibrationEffect predefinido, consulta Cómo usar un VibrationEffect predefinido para generar respuesta táctil.

Composición de VibrationEffect

Una composición de VibrationEffect es un efecto de vibración creado con la API de VibrationEffect.startComposition. Esta API permite una tecnología táctil enriquecida expresiva mediante la creación de una secuencia de primitivas con intensidades y demoras personalizadas. Sin embargo, ten especial cuidado para asegurarte de que el dispositivo admita las funciones que se combinan a fin de evitar una experiencia general inconsistente.

Compatibilidad y requisitos

Para reproducir cualquier VibrationEffect, se requiere el permiso VIBRATE en el manifiesto de la app.

No todos los dispositivos admiten todas las funciones de la API de composición, y es importante asegurarse de que las primitivas estén disponibles.

Cómo comprobar la compatibilidad básica con la vibración

La compatibilidad por primitiva se puede recuperar con el método Vibrator.arePrimitivesSupported. Como alternativa, un conjunto de primitivas se puede verificar juntos mediante el método Vibrator.areAllPrimitivesSupported, lo que equivale a AND, la compatibilidad por primitiva.

Uso de composiciones VibrationEffect

Para obtener información detallada sobre el uso de composiciones VibrationEffect, consulta Cómo crear composiciones de vibración.

Vibraciones de activación/desactivación, en un intento y con forma de onda

La forma de vibración más antigua compatible con Android son los patrones simples de activación y desactivación de vibradores con duraciones configurables. Por lo general, estas APIs no están bien alineadas con los principios de diseño de tecnología táctil, ya que pueden generar tecnología táctil; evítalas, excepto como último recurso.

El caso de uso más común para las vibraciones de activación y desactivación son las notificaciones, en las que, sin importar qué, se desea algo de vibración. Las vibraciones de forma de onda también permiten, de manera única, que un patrón se repita indefinidamente, como puedes imaginar con un tono.

El patrón de operación única hace referencia a la vibración una vez durante N milisegundos.

Existen dos tipos de patrones de forma de onda:

  • Solo tiempos. Este tipo de forma de onda es una descripción de las duraciones alternas consumidas y en las que se pasa. Los tiempos comienzan con la duración agotada. En consecuencia, los patrones de forma de onda suelen comenzar con un valor cero para indicar que deben comenzar a vibrar de inmediato.
  • Tiempos y amplitudes. Este tipo de onda tiene un array adicional de amplitudes que coincide con cada cifra de tiempo, en lugar de la activación/desactivación implícita de la primera forma. Sin embargo, es importante comprobar que el dispositivo admita el control de la amplitud para garantizar que se pueda lograr el escalamiento deseado.

Compatibilidad y requisitos

Dado que las vibraciones de activación/desactivación son la forma más antigua de vibrar, son compatibles prácticamente con todos los dispositivos con un vibrador, como se describe más adelante en esta página.

Para reproducir cualquier llamada a VibrationEffect o al estilo anterior de vibrate, se requiere el permiso VIBRATE en el manifiesto de la app.

Cuando uses diferentes valores de amplitud en una forma de onda, te recomendamos que el dispositivo admita el control de amplitud.

Cómo comprobar si es compatible con el control de amplitud

Los valores de amplitud distintos de cero se redondean al 100% en dispositivos sin control de amplitud, por lo que es importante verificar si la compatibilidad está presente mediante Vibrator.hasAmplitudeControl. Consulta el control de amplitud para obtener más detalles.

Debes considerar cuidadosamente si tu efecto tiene una calidad suficiente sin control de amplitud. Puede ser mejor recurrir a una vibración de activación/desactivación diseñada explícitamente.

Uso de vibraciones de activación/desactivación

En los niveles más recientes del SDK, todos los modos de vibración se consolidaron en una sola clase VibrationEffect expresiva, en la que estas vibraciones simples se crean con VibrationEffect.createOneshot o VibrationEffect.createWaveform.

APIs de Notification

Cuando personalizas las notificaciones de tu app, puedes usar una de las siguientes APIs para asociar un patrón con cada canal de notificaciones:

Todas estas formas toman un patrón de forma de onda de encendido y apagado básico, como se describió anteriormente, en el que la primera entrada es el retraso antes de activar el vibrador.

Conceptos generales

Varios conceptos se aplican a las superficies de API detalladas anteriormente.

¿El dispositivo tiene vibrador?

Puedes obtener una clase Vibrator no nula de context.getSystemService(Vibrator.class). Si el dispositivo no tiene un vibrador, las llamadas a las APIs de vibración no tendrán ningún efecto, por lo que las apps no necesitan controlar toda su tecnología háptica en una condición. Sin embargo, si es necesario, una aplicación puede llamar a hasVibrator() para determinar si se trata de un vibrador real (true) o un stub (false).

¿El usuario inhabilitó la tecnología táctil?

Algunas implementaciones personalizadas pueden requerir que se verifique manualmente si el usuario inhabilitó por completo la configuración de Respuesta táctil de Android, en cuyo caso se deben suprimir los efectos de la respuesta táctil. Esta configuración se puede consultar mediante la clave HAPTIC_FEEDBACK_ENABLED, donde un valor de cero significa que está inhabilitado.

Atributos de vibración

Los atributos de vibración (actualmente en forma de AudioAttributes) se pueden proporcionar para ayudar a informar al sistema el propósito de la vibración. Esto es necesario cuando se inicia una vibración cuando la app está en segundo plano, ya que solo la tecnología táctil de atención se admite para el uso en segundo plano.

La creación de AudioAttributes se aborda en la documentación de clase y se debe considerar como vibración en lugar de sonido.

Como guía, en la mayoría de los casos, el tipo de contenido es CONTENT_TYPE_SONIFICATION y el uso puede ser valores como USAGE_ASSISTANCE_SONIFICATION para respuestas táctiles en primer plano o USAGE_ALARM para una alarma en segundo plano. Las marcas de audio no afectan las vibraciones.

Control de amplitud

Si un vibrador tiene control de amplitud, puede reproducir vibraciones con diferentes intensidades. Esta es una capacidad importante para producir tecnología táctil enriquecida, además de permitir que el usuario controle las intensidades táctiles predeterminadas.

Para comprobar la compatibilidad con el control de amplitud, llama a Vibrator.hasAmplitudeControl. Si un vibrador no es compatible con la amplitud, todos los valores de amplitud se asignarán a apagado/activado en función de si son cero o distintos de cero. En consecuencia, las aplicaciones que usen tecnología táctil enriquecida con diferentes amplitudes deben considerar inhabilitarlas si el dispositivo carece de control de amplitud.