Implémenter l'haptique

Les fabricants d’appareils sont généralement considérés comme les propriétaires des actifs privés créés pour chaque appareil. En tant que tel, leurs efforts d’ingénierie se concentrent souvent sur chaque appareil ; peu ou pas d’effort est consacré à la cohérence des autres appareils de l’écosystème.

À l’opposé, les développeurs s’efforcent de créer des applications qui fonctionnent sur tous les téléphones Android de l’écosystème, quelles que soient les spécifications techniques de chaque appareil. Cette différence d'approche peut entraîner un problème de fragmentation, par exemple, les capacités matérielles de certains téléphones ne correspondent pas aux attentes définies par les développeurs d'applications. Ainsi, si les API haptiques fonctionnent sur certains téléphones Android mais pas sur d’autres, le résultat est un écosystème incohérent. C'est pourquoi la configuration matérielle joue un rôle essentiel en garantissant que les fabricants peuvent implémenter les API haptiques Android sur chaque appareil.

Cette page fournit une liste de contrôle étape par étape pour configurer la conformité matérielle afin d'optimiser l'utilisation des API haptiques Android.

La figure ci-dessous illustre l'établissement de connaissances communes entre les fabricants d'appareils et les développeurs, étape essentielle dans la création d'un écosystème cohérent.

Diagramme de cas d'utilisation de l'haptique pour les développeurs d'applications et les fabricants d'appareils

Figure 1. Développer les connaissances entre les fabricants d'appareils et les développeurs

Liste de contrôle de mise en œuvre de l'haptique

  1. Implémenter des constantes

    • Liste des constantes pour implémenter l'haptique.
  2. Mapper les constantes entre HAL et l'API

  3. Évaluer le matériel

    • Instructions sur les effets haptiques cibles. Utilisez ces instructions pour effectuer des vérifications rapides sur votre matériel.

Nous explorerons chacune de ces étapes plus en détail ci-dessous.

Étape 1 : Implémenter des constantes

Effectuez ces vérifications pour déterminer si votre appareil répond aux exigences minimales pour implémenter l'haptique.

Organigramme du processus de mise en œuvre de l'haptique

Figure 2. Effets de la mise en œuvre

Organigramme des étapes d'implémentation des primitives

Figure 3. Implémentation des primitives

Vérifiez l'état de mise en œuvre des constantes haptiques suivantes.

Constantes haptiques Emplacements et résumés
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK Classe VibrationEffect
Les constantes haptiques dans VibrationEffect n'incluent aucune notion d'événements d'entrée et n'ont aucun élément d'interface utilisateur. Les constantes incluent à la place la notion de niveaux d'énergie, comme EFFECT_CLICK et EFFECT_HEAVY_CLICK , qui sont appelés par createPredefined() .
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD Classe VibrationEffect.Composition
Les constantes haptiques dans VibrationEffect.Composition peuvent avoir une intensité évolutive, qui est appelée par addPrimitive(int primitiveId, float scale, int delay) .

Les vibrations alternatives décrites ci-dessous sont effectuées sur des appareils qui n'implémentent pas les constantes VibrationEffect . Il est recommandé de mettre à jour ces configurations pour obtenir de meilleures performances sur ces appareils.

  1. EFFECT_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les horaires configurés dans frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern .

  2. EFFECT_HEAVY_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les timings configurés dans frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les timings (0, 30, 100, 30).

  4. EFFECT_TICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les timings configurés dans frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Organigramme des étapes de test du retour haptique

Figure 4. Implémentation de constantes de rétroaction

Vérifiez l’état des constantes de commentaires publics suivantes.

Constantes haptiques Emplacements et résumés
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 Classe HapticFeedbackConstants
Les constantes haptiques dans HapticFeedbackConstants assistent les événements d'entrée avec certains éléments de l'interface utilisateur, tels que KEYBOARD_PRESS et KEYBOARD_RELEASE , qui sont appelés par performHapticFeedback() .

Étape 2 : Mappez les constantes entre HAL et l'API

L'étape 2 présente les mappages recommandés entre les constantes HAL publiques et les constantes API. Si le matériel évalué à l'étape 1 n'implémente pas les constantes HAL, l'étape 2 doit alors être utilisée pour mettre à jour les modèles de secours décrits à l'étape 1 afin de générer des sorties similaires. Le mappage est assisté par deux modèles par défaut différents.

  • Modèle discret (simple)

    • L'amplitude est la variable clé de ce modèle. Chaque entité du HAL représente une amplitude haptique différente.
    • Ce modèle constitue une exigence minimale nécessaire pour implémenter l'UX haptique de base.
    • Une UX haptique plus avancée nécessite un matériel avancé et un modèle avancé (modèle continu).
  • Modèle continu (avancé)

    • La texture et l'amplitude sont les variables clés de ce modèle. Chaque entité du HAL représente différentes textures haptiques. L'amplitude de chaque entité HAL est contrôlée par le facteur d'échelle ( S ).
    • Ce modèle nécessite un matériel avancé. Si les OEM souhaitent utiliser une UX haptique avancée avec VibrationEffect.Composition (pour une utilisation optimale des dernières API haptiques), il est recommandé d'implémenter leur matériel à l'aide de ce modèle.

Modèle discret

Il est recommandé de mapper toutes les constantes publiques fournies dans l'API avec les constantes HAL appropriées. Pour commencer ce processus, découvrez combien de formes d'onde haptiques avec une amplitude discrète l'appareil peut définir dans le HAL. Une question spécifique structurée autour de cette notion ressemble à ceci : combien d'effets haptiques à impulsion unique avec des différences d'amplitude perceptibles par l'homme peuvent être définis dans mon téléphone ? La réponse à cette question détermine le mappage.

La définition des constantes HAL est un processus dépendant du matériel. Par exemple, un téléphone d’entrée de gamme peut disposer uniquement des capacités matérielles nécessaires pour produire une seule forme d’onde haptique. Les appareils dotés de composants matériels plus avancés produisent une gamme plus large de niveaux d'amplitude discrets et peuvent définir plusieurs formes d'onde haptiques dans le HAL. Le mappage constant HAL-API prend la constante HAL (en utilisant l'amplitude moyenne comme ligne de base), puis organise les effets plus forts ou plus faibles à partir de là.

Diagramme de la plage constante HAL et des amplitudes de rétroaction

Figure 5. Plage constante HAL par amplitude

Lorsque le nombre de constantes HAL avec une amplitude discrète est défini, il est temps de mapper les constantes HAL et API en fonction du nombre de constantes HAL. Ce processus de cartographie peut segmenter une seule constante API d'impulsion en jusqu'à trois groupes discrets de niveaux d'amplitude. La façon dont les constantes API sont segmentées est basée sur les principes UX pour accompagner les événements d'entrée. Pour plus d'informations, consultez Conception Haptics UX .

Modèle discret pour le mappage constant HAL-API

Figure 6. Mappage constant HAL-API : modèle discret

Si votre appareil ne prend en charge que deux constantes HAL avec des amplitudes discrètes, envisagez de fusionner les constantes HAL de niveau d'amplitude moyen et élevé. Un exemple de cette notion en pratique serait de mapper EFFECT_CLICK et EFFECT_HEAVY_CLICK sur la même constante HAL, qui serait la constante HAL de niveau d'amplitude moyenne. Si votre appareil ne prend en charge qu'une seule constante HAL avec une amplitude discrète, envisagez de fusionner les trois niveaux en un seul.

Modèle continu

Le modèle continu avec évolutivité d'amplitude peut être appliqué pour définir les constantes HAL. Un facteur d'échelle ( S ) peut être appliqué aux constantes HAL (par exemple, HAL_H0 , HAL_H1 ) pour produire le HAL mis à l'échelle ( HAL_H0 x S ). Dans ce cas, le HAL mis à l'échelle est mappé pour définir les constantes API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) comme le montre la figure 7. En utilisant l'évolutivité d'amplitude du modèle continu, un appareil peut stocker un petit nombre de constantes HAL avec des textures distinctives. et ajoutez des variations d'amplitude en ajustant le facteur d'échelle ( S ). Les fabricants d'appareils peuvent définir le nombre de constantes HAL en fonction du nombre de textures haptiques différentes qu'ils souhaitent fournir.

Plage constante HAL par texture et amplitude

Figure 7. Plage constante HAL par texture (HAL_H0) et échelle d'amplitude (S)

Modèle continu pour le mappage constant HAL-API

Figure 8. Cartographie constante HAL-API : modèle continu

Dans le modèle continu, différentes constantes HAL représentent différentes textures haptiques plutôt que différentes amplitudes ; le facteur d'échelle ( S ) peut configurer l'amplitude. Cependant, comme la perception de la texture (par exemple la netteté) est liée à la perception de la durée et de l'amplitude, il est recommandé de combiner la texture et le facteur d'échelle (dans le processus de conception du mappage HAL-API).

La figure 7 illustre le mappage constant en augmentant la variation d'un HAL à plusieurs constantes API avec évolutivité de l'amplitude.

Variation croissante 1

Variation croissante 2

Figure 9. Variation croissante avec l'évolutivité de l'amplitude

Pour toutes les constantes API évolutives telles que PRIMITIVE_TICK et PRIMITIVE_CLICK dans VibrationEffect.Composition , le niveau d'énergie de la constante API dépend du paramètre float scale lorsque la constante API est déclarée via addPrimitive(int primitiveID, float scale, int delay) . PRIMITIVE_TICK et PRIMITIVE_CLICK peuvent être conçus avec une distinction claire en utilisant différentes constantes HAL. Cette approche est recommandée si vous souhaitez ajouter de la variation à la texture .

Étape 3 : Évaluez le matériel

L'évaluation du matériel implique la définition de trois effets haptiques, appelés Effets 1, 2 et 3 pour cette évaluation spécifique.

Effet 1 : constantes haptiques courtes prédéfinies

La constante VibrationEffect.EFFECT_CLICK est l'effet de base ou dénominateur commun dans le mappage HAL-API fourni à l'étape 2. Elle est mappée avec l'effet le plus utilisé, HapticFeedbackConstants.KEYBOARD_PRESS . L'évaluation de cet effet permet de déterminer l'état de préparation de votre appareil cible pour une haptique claire .

Effet 2 : effet haptique personnalisé court

La constante VibrationEffect.createOneShot(20,255) est destinée aux effets haptiques personnalisés. Pour les impulsions personnalisées courtes et uniques, 20 ms est le seuil maximum recommandé pour définir la durée. Une seule impulsion de plus de 20 ms n'est pas recommandée car elle est perçue comme une vibration bourdonnante .

Forme d'onde d'un court effet haptique personnalisé

Figure 10. Effet haptique personnalisé court

Effet 3 : Effet haptique personnalisé long avec variation d'amplitude

La constante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) est destinée aux effets personnalisés longs avec variation d'amplitude. La capacité à produire des amplitudes variables pour des effets haptiques personnalisés est l'un des indicateurs permettant d'évaluer les capacités de l'appareil pour une haptique riche . Les timings [] et amplitudes [] sont respectivement {500, 500} et {128, 255} , ce qui présente une tendance croissante de l'amplitude de 50 % à 100 %, avec un taux d'échantillonnage de 500 ms.

Forme d'onde à effet haptique avec variation d'amplitude

Figure 11. Effet haptique personnalisé long avec variation d'amplitude

Pour vérifier les capacités matérielles du contrôle d'amplitude pour Effect 3, utilisez la méthode Vibrator.hasAmplitudeControl() . Le résultat doit être true pour exécuter VibrationEffect.createWaveform avec une amplitude variable comme prévu.

Organigramme de l'évaluation subjective de l'effet haptique

Figure 12. Évaluation par le sujet de l'effet haptique 1, 2 et 3

Effectuer une évaluation subjective

Pour un contrôle rapide de cohérence, effectuez d’abord une évaluation subjective. Le but de l'évaluation subjective est d'observer l'amplitude des effets haptiques afin de déterminer si l'appareil peut générer des haptiques avec des amplitudes perceptibles par l'homme.

Une question spécifique structurée autour de cette notion ressemble à ceci : l'appareil peut-il produire des effets haptiques facilement perceptibles pour les utilisateurs comme prévu ? Répondre à cette question vous aide à éviter les échecs haptiques , y compris les haptiques imperceptibles que les utilisateurs ne peuvent pas ressentir, ou les haptiques involontaires dans lesquelles les formes d'onde ne produisent pas de motifs comme prévu.