En esta sección, se presenta una introducción a las diferentes APIs de tecnología táctil disponibles en Android. También se explica cuándo y cómo verificar la compatibilidad con dispositivos 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 entre ellos. En la siguiente tabla, se resumen estos atributos de alto nivel de cada enfoque:
- La disponibilidad es especialmente importante cuando se planifica el resguardo de comportamiento y se debe combinar con la verificación de la compatibilidad de dispositivos individuales.
- La tecnología táctil clara ofrece sensaciones nítidas y limpias que son menos perturbadoras para los usuarios.
- La tecnología táctil enriquecida tiene mayor expresividad y, a menudo, requiere hardware más rico en funciones.
Plataforma de la API | Disponibilidad | Cómo borrar la tecnología táctil | 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 encendido/apagado, únicas y de 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:
- ¿El dispositivo tiene un vibrador?
- El control de amplitud permite efectos táctiles más fluidos y enriquecidos, pero no es compatible con todos los dispositivos.
VibrationAttributes()
te ayuda a clasificar la vibración según su uso, lo que garantiza que se le aplique la configuración de usuario adecuada y, de esta manera, se eviten sorpresas para el usuario.
HapticFeedbackConstants
La clase HapticFeedbackConstants
proporciona constantes basadas en acciones para permitir que las apps agreguen respuestas táctiles 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.El parámetro de configuración principal relacionado es 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 los comentarios táctiles.
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 más información sobre el uso de HapticFeedbackConstants
, consulta Cómo agregar comentarios táctiles a los eventos.
VibrationEffect
predefinido
La clase VibrationEffect
proporciona varias constantes predefinidas, como CLICK
, TICK
y DOUBLE_CLICK
. Es posible que estos efectos estén optimizados 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 alternativo cuando se usa VibrationEffect
predefinido, ya que las constantes que no tienen una implementación optimizada para el dispositivo vuelven a un resguardo alternativo de plataforma estándar.
Las APIs de Vibrator.areEffectsSupported
y Vibrator.areAllEffectsSupported
se usan para determinar si hay una implementación optimizada para el dispositivo.
Los efectos predefinidos se pueden usar sin una implementación optimizada y se usa el resguardo estándar de la plataforma. En consecuencia, estas APIs de areEffectsSupported
solo son necesarias si una aplicación desea tener en cuenta si el efecto está optimizado para el dispositivo o no.
Los métodos de verificación de efectos pueden mostrar uno de los siguientes tres valores:
VIBRATION_EFFECT_SUPPORT_YES
indica que el dispositivo tiene compatibilidad optimizada para este efecto.VIBRATION_EFFECT_SUPPORT_NO
indica que el dispositivo no tiene compatibilidad optimizada, pero aún usa el resguardo de la plataforma.VIBRATION_EFFECT_SUPPORT_UNKNOWN
indica que el sistema no sabe si la implementación está optimizada o no.
Como el valor de 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 a la versión anterior 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 respuestas táctiles.
Composición de VibrationEffect
Una composición VibrationEffect
es un efecto de vibración creado con la API de VibrationEffect.startComposition
. Esta API permite haptics enriquecidos expresivos mediante la creación de una secuencia de primitivas con retrasos e intensidades personalizados. Sin embargo, ten especial cuidado de asegurarte de que el dispositivo admita las funciones que se combinan para evitar una experiencia general incoherente.
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 verificar la compatibilidad con primitivas de vibración
La compatibilidad por primitiva se puede recuperar con el método Vibrator.arePrimitivesSupported
. Como alternativa, se puede verificar un conjunto de primitivas con el método Vibrator.areAllPrimitivesSupported
, lo que equivale a AND
la compatibilidad por primitiva.
Uso de composiciones VibrationEffect
Para obtener más información sobre el uso de composiciones VibrationEffect
, consulta Cómo crear composiciones de vibración.
Vibraciones de encendido y apagado, de un solo toque y de forma de onda
La forma más antigua de vibración compatible con Android son patrones simples de encendido y apagado del vibrador con duraciones configurables. Por lo general, estas APIs no están bien alineadas con los principios de diseño táctil porque pueden generar efectos táctiles molestos. Evítalas, a menos que sea un último recurso.
El caso de uso más común de las vibraciones de encendido y apagado son las notificaciones, en las que, sin importar nada, se desea que haya alguna vibración. Las vibraciones de forma de onda también permiten que un patrón se repita de forma indefinida, como podrías imaginar para un tono de llamada.
Un patrón único hace referencia a vibrar 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 que se pasan apagadas y las que se pasan encendidas. Los tiempos comienzan con la duración que se pasó apagada. En consecuencia, los patrones de forma de onda suelen comenzar con un valor de cero para indicar que se debe comenzar a vibrar de inmediato.
- Tiempo y amplitud Este tipo de forma de onda tiene un array adicional de amplitudes para coincidir con cada figura de tiempo, en lugar del encendido y apagado implícito de la primera forma. Sin embargo, es importante verificar que el dispositivo admita el control de amplitud para garantizar que se pueda lograr la escala deseada.
Compatibilidad y requisitos
Como las vibraciones de encendido y apagado son la forma más antigua de vibración, son compatibles con prácticamente todos los dispositivos con un vibrador, como se describe más adelante en esta página.
Para reproducir cualquier llamada VibrationEffect
o vibrate
de estilo anterior, 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 verifiques que el dispositivo admita el control de amplitud.
Cómo verificar la compatibilidad 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 con Vibrator.hasAmplitudeControl
. Consulta el control de amplitud para obtener más detalles.
Debes considerar cuidadosamente si tu efecto tiene la calidad suficiente sin control de amplitud. Es posible que sea mejor recurrir a una vibración de encendido y apagado diseñada de forma explícita.
Uso de vibraciones de encendido y apagado
En niveles de SDK más recientes, todos los modos de vibración se consolidaron en una sola clase expresiva VibrationEffect
, en la que se crean estas vibraciones simples con VibrationEffect.createOneshot
o VibrationEffect.createWaveform
.
APIs de notificaciones
Cuando personalices las notificaciones de tu app, puedes usar una de las siguientes APIs para asociar un patrón con cada canal de notificaciones:
- AndroidX
- Android
Todas estas formas tienen un patrón de forma de onda de encendido y apagado básico, como se describió anteriormente, en el que la primera entrada es la demora antes de encender el vibrador.
Conceptos generales
Varios conceptos se aplican a las plataformas de API que se detallaron anteriormente.
¿El dispositivo tiene un 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 tienen ningún efecto, por lo que las apps no necesitan restringir todas sus funciones táctiles 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 háptica?
Es posible que algunas implementaciones personalizadas requieran verificar de forma manual si el usuario inhabilitó por completo la configuración de Feedback táctil de Android, en cuyo caso se deben suprimir los efectos de los comentarios táctiles. Se puede consultar este parámetro de configuración con la clave HAPTIC_FEEDBACK_ENABLED
, en la que un valor de cero significa inhabilitado.
Atributos de vibración
Se pueden proporcionar atributos de vibración (actualmente en forma de AudioAttributes
) para ayudar al sistema a informar el propósito de la vibración. Esto es obligatorio cuando se inicia una vibración cuando la app está en segundo plano, ya que solo se admiten las respuestas táctiles de atención para el uso en segundo plano.
La creación de AudioAttributes
se describe en la documentación de la 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 la respuesta táctil en primer plano o USAGE_ALARM
para una alarma en segundo plano. Las marcas de audio no tienen efecto en las vibraciones.
Control de amplitud
Si un vibrador tiene control de amplitud, puede reproducir vibraciones con diferentes intensidades. Esta es una función importante para producir haptics enriquecidos, además de permitir que el usuario controle las intensidades táctiles predeterminadas.
Para verificar la compatibilidad con el control de amplitud, llama a Vibrator.hasAmplitudeControl
. Si un vibrador no admite amplitud, todos los valores de amplitud se asignarán a apagado/encendido según si son cero o no. En consecuencia, las aplicaciones que usan tecnología táctil enriquecida con amplitudes variables deberían considerar inhabilitarlas si el dispositivo no tiene control de amplitud.