Les fabricants d'appareils sont généralement considérés comme propriétaires des éléments privés créés pour chaque appareil. Par conséquent, leurs efforts d'ingénierie sont souvent axés sur une base par appareil. Peu ou pas d'efforts sont consacrés à la cohérence des autres appareils de l'écosystème.
À l'inverse, 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 fonctionnalités matérielles de certains téléphones ne correspondent pas aux attentes des développeurs d'applications. Ainsi, si les API haptiques fonctionnent sur certains téléphones Android, mais pas sur d'autres, l'écosystème est incohérent. C'est pourquoi la configuration matérielle joue un rôle essentiel pour que les fabricants puissent implémenter les API haptiques Android sur tous les appareils.
Cette page fournit une checklist détaillée pour configurer la conformité matérielle afin d'optimiser l'utilisation des API haptiques Android.
La figure ci-dessous illustre la création de connaissances communes entre les fabricants d'appareils et les développeurs, une étape essentielle pour créer un écosystème cohérent.
Figure 1 : Développer les connaissances entre les fabricants et les développeurs d'appareils
Checklist d'implémentation de la haptique
-
- Liste des constantes à implémenter pour la haptique.
Mappage des constantes entre HAL et l'API
- Recommandations de mappage entre les constantes d'API publiques (nommées espaces réservés dans le framework) et les constantes HAL, qui implémentent les espaces réservés.
- Pour en savoir plus sur ce processus, consultez la section Principes de conception pour guider la mise en correspondance recommandée.
-
- Instructions concernant les effets haptiques cibles. Suivez ces instructions pour effectuer des vérifications rapides sur votre matériel.
Nous reviendrons plus en détail sur chacune de ces étapes ci-dessous.
Étape 1: Implémentez des constantes
Effectuez ces vérifications pour déterminer si votre appareil remplit les conditions minimales requises pour implémenter la haptique.
Figure 2. Implémenter des effets
Figure 3. Implémenter des primitives
Vérifiez l'état d'implémentation des constantes haptiques suivantes.
Constantes haptiques | Lieux 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 ne comportent aucun élément d'interface utilisateur. Les constantes incluent plutôt la notion de niveaux d'énergie, tels que 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 sont autorisées à 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 les appareils qui n'implémentent pas les constantes VibrationEffect
. Nous vous recommandons de mettre à jour ces configurations pour optimiser les performances sur ces appareils.
EFFECT_CLICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveform
et les délais configurés surframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
.EFFECT_HEAVY_CLICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveform
et les délais configurés surframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
.EFFECT_DOUBLE_CLICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveform
et les temps (0, 30, 100, 30).EFFECT_TICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveform
et les délais configurés surframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
.
Figure 4. Implémenter des constantes de retour
Vérifiez l'état des constantes de commentaires publics suivantes.
Constantes haptiques | Lieux 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 aident les événements d'entrée avec certains éléments d'interface utilisateur, tels que KEYBOARD_PRESS etKEYBOARD_RELEASE , qui sont appelés parperformHapticFeedback() . |
Étape 2: Mapper les constantes entre HAL et l'API
L'étape 2 présente les mappages recommandés entre les constantes HAL publiques et les constantes de l'API. Si le matériel évalué à l'étape 1 n'implémente pas les constantes HAL, l'étape 2 doit être utilisée pour mettre à jour les modèles de remplacement décrits à l'étape 1 afin de générer des résultats 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 est une exigence minimale requise pour implémenter l'expérience haptique de base.
- Une expérience haptique plus avancée nécessite du matériel et un modèle avancés (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 du matériel avancé. Si les OEM souhaitent utiliser une expérience utilisateur haptique avancée avec
VibrationEffect.Composition
(pour une utilisation optimale des dernières API haptiques), nous recommandons 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éterminez le nombre de formes d'onde haptique à amplitude discrète que l'appareil peut définir dans le HAL. Une question spécifique structurée autour de cette notion se présente comme suit: Combien d'effets haptiques à impulsion unique avec des différences d'amplitude perceptibles par l'homme peuvent être définis sur mon téléphone ? La réponse à cette question détermine la mise en correspondance.
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 ne peut disposer que des fonctionnalités matérielles permettant de produire une seule forme d'onde haptique. Les appareils dotés de composants matériels plus avancés produisent une plage plus large de niveaux d'amplitude discrets et peuvent définir plusieurs formes d'onde haptique dans le HAL. Le mappage des constantes HAL-API prend la constante HAL (en utilisant l'amplitude moyenne comme référence), puis organise les effets plus forts ou plus faibles à partir de là.
Figure 5. Plage de constantes 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 par le nombre de constantes HAL. Ce processus de mappage peut segmenter une seule constante d'API d'impulsion en trois groupes distincts de niveaux d'amplitude. La segmentation des constantes de l'API est basée sur les principes d'expérience utilisateur pour les événements d'entrée associés. Pour en savoir plus, consultez la section Conception UX haptique.
Figure 6. Mappage des constantes HAL-API: modèle discret
Si votre appareil n'est compatible qu'avec 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 consiste à mapper EFFECT_CLICK
et EFFECT_HEAVY_CLICK
sur la même constante HAL, qui serait la constante HAL de niveau d'amplitude moyen.
Si votre appareil n'est compatible qu'avec une constante HAL avec une amplitude discrète, envisagez de fusionner les trois niveaux en un.
Modèle continu
Le modèle continu avec évolutivité de l'amplitude peut être appliqué pour définir des constantes HAL. Un facteur de mise à l'échelle (S
) peut être appliqué aux constantes HAL (par exemple, HAL_H0
, HAL_H1
) pour générer la HAL mise à l'échelle (HAL_H0
x S
). Dans ce cas, la HAL mise à l'échelle est mappée pour définir les constantes de l'API (HAL_H0
x S1
= H0S1
= EFFECT_TICK
), comme illustré à la figure 7. En utilisant la scalabilité de l'amplitude du modèle continu, un appareil peut stocker un petit nombre de constantes HAL avec des textures distinctives et ajouter des variations d'amplitude en ajustant le facteur de mise à l'é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 de constantes HAL par texture (HAL_H0) et échelle d'amplitude (S)
Figure 8. Mappage des constantes 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 de mise à l'échelle (S
) peut configurer l'amplitude. Toutefois, 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 de mise à l'échelle (dans le processus de conception de la mise en correspondance HAL-API).
La figure 7 illustre le mappage de constantes en augmentant la variation d'un HAL à de nombreuses constantes d'API avec une évolutivité d'amplitude.
Figure 9. Augmenter la variation avec évolutivité de l'amplitude
Pour toutes les constantes d'API évolutives telles que PRIMITIVE_TICK
et PRIMITIVE_CLICK
dans VibrationEffect.Composition
, le niveau d'énergie de la constante d'API dépend du paramètre float scale
lorsque la constante d'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 à l'aide de constantes HAL différentes. Cette approche est recommandée si vous souhaitez ajouter de la variation à la texture.
Étape 3: Évaluez le matériel
L'évaluation matérielle implique de définir trois effets haptiques, nommés Effets 1, 2 et 3 pour cette évaluation spécifique.
Effet 1: constantes haptiques courtes prédéfinies
La constante VibrationEffect.EFFECT_CLICK
correspond à l'effet de référence ou au dénominateur commun dans le mappage HAL-API fourni à l'étape 2. Il est mappé avec l'effet le plus utilisé, HapticFeedbackConstants.KEYBOARD_PRESS
.
L'évaluation de cet effet permet de déterminer si votre appareil cible est prêt à des retours haptiques clairs.
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, le seuil maximal recommandé pour définir la durée est de 20 ms. 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 les effets haptiques personnalisés est l'un des indicateurs permettant d'évaluer les capacités de l'appareil pour les effets haptiques riches.
Les valeurs timings []
et amplitudes []
recommandées sont respectivement {500, 500}
et {128, 255}
, qui présentent une tendance à l'augmentation 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 de l'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 du sujet des effets haptiques 1, 2 et 3
Effectuer une évaluation subjective
Pour effectuer un contrôle rapide de la cohérence, effectuez d'abord une évaluation subjective. L'objectif de l'évaluation subjective est d'observer l'amplitude des effets haptiques afin de déterminer si l'appareil peut générer des signaux haptiques avec des amplitudes perceptibles par l'humain.
Une question spécifique structurée autour de cette notion se présente comme suit: L'appareil peut-il produire des effets haptiques perceptibles pour les utilisateurs comme prévu ? Répondre à cette question vous permet d'éviter les échecs haptiques, y compris les haptiques imperceptibles que les utilisateurs ne peuvent pas ressentir ou les haptiques involontaires où les formes d'ondes ne produisent pas de motifs comme prévu.
Effectuer une évaluation avancée
Nous vous recommandons vivement d'effectuer des évaluations de qualité avancées. Les évaluations de qualité avancées caractérisent les attributs quantifiables des effets haptiques pour implémenter des effets haptiques de qualité. Une fois terminé, les fabricants d'appareils doivent pouvoir diagnostiquer l'état actuel de la technologie haptique, ce qui leur permet de définir des objectifs pour améliorer la qualité globale. Consultez la section Évaluation du matériel.