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.
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
- Liste des constantes pour implémenter l'haptique.
Mapper les constantes entre HAL et l'API
- Recommandations de mappage entre les constantes de l'API publique (appelées espaces réservés dans le framework) et les constantes HAL, qui implémentent les espaces réservés.
- Voir Principes de conception pour guider le mappage recommandé pour en savoir plus sur ce processus.
- 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.
Figure 2. Effets de la mise en œuvre
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.
EFFECT_CLICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveform
et les horaires configurés dansframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
.EFFECT_HEAVY_CLICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveform
et les timings configurés dansframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
.EFFECT_DOUBLE_CLICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveform
et les timings (0, 30, 100, 30).EFFECT_TICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveform
et les timings configurés dansframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
.
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 repli 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.
- 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 (
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à.
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 .
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.
Figure 7. Plage constante HAL par texture (HAL_H0) et échelle d'amplitude (S)
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.
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 .
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.
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.
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.