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 tels, leurs efforts d'ingénierie sont souvent concentré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'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. Donc, 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 pour garantir 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é du matériel afin d'utiliser au mieux les API haptiques Android.
La figure ci-dessous illustre l'établissement de connaissances communes entre les fabricants et les développeurs d'appareils, qui est une étape essentielle dans la création d'un écosystème cohérent.
Figure 1. Renforcement des 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.
Mappez les constantes entre HAL et l'API
- Recommandations de mappage entre les constantes d'API publiques ( espaces réservés nommés dans le cadre) 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 allons explorer 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 mettre en œuvre l'haptique.
Figure 2. Mise en œuvre des effets
Figure 3. Implémentation de primitives
Vérifiez l'état d'implémentation 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 notion de niveaux d'énergie à la place, comme EFFECT_CLICK et EFFECT_HEAVY_CLICK , qui sont appelées par createPredefined() . |
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD | VibrationEffect.Composition classeLes constantes haptiques dans VibrationEffect.Composition sont autorisées à avoir une intensité évolutive, qui sont appelées par addPrimitive(int primitiveId, float scale, int delay) . |
Les vibrations alternatives décrites ci-dessous seront effectuées sur des appareils qui n'implémentent pas les constantes VibrationEffect
. Il est recommandé de mettre à jour ces configurations pour qu'elles fonctionnent au mieux sur ces appareils.
EFFECT_CLICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveform
et les minutages 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 minutages 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 minutages configurés dansframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
.
Figure 4. Implémentation des constantes de rétroaction
Vérifiez l'état des constantes de rétroaction publiques suivantes.
Constantes haptiques | Emplacements et résumés |
---|---|
| Classe HapticFeedbackConstants classLes 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 être utilisée pour mettre à jour les modèles de secours décrits à l'étape 1 afin de générer des sorties similaires. La cartographie est assistée 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é dans le HAL représente une amplitude haptique différente.
- Ce modèle est une exigence minimale nécessaire pour mettre en œuvre 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 expérience utilisateur 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 la cartographie.
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 n'avoir que les capacités matérielles 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 des 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 par le nombre de constantes HAL. Ce processus de mappage peut segmenter une seule constante API d'impulsion en jusqu'à trois groupes discrets de niveaux d'amplitude. La façon dont les constantes d'API sont segmentées est basée sur les principes UX pour accompagner les événements d'entrée. Pour plus d'informations, voir Conception UX haptique .
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 moyenne et élevée. Un exemple de cette notion dans la 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 des 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 ajouter 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. Mappage constant 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, étant donné que 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 une évolutivité d'amplitude.
Figure 9. Augmentation de la variation avec l'évolutivité de l'amplitude
Remarque : la figure ci-dessus illustre une instance spécifique de mappage de constantes, les conventions de dénomination sont donc hypothétiques. L'exécution de ce processus est unique pour chaque fabricant d'appareils.
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 une variation à la texture .
Étape 3 : évaluer le matériel
L'évaluation du matériel implique la définition de trois effets haptiques, étiqueté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 le 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 l'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 maximal 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 longs effets personnalisés 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 haptiques riches . Les timings []
et les amplitudes []
sont {500, 500}
et {128, 255}
, respectivement, ce qui présente une tendance à la hausse 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 l'effet 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 une vérification rapide de la cohérence, effectuez d'abord une évaluation subjective. Le but de l'évaluation subjective est d'observer l'amplitude des effets haptiques pour 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 haptiques défaillantes , y compris les haptiques imperceptibles que les utilisateurs ne peuvent pas ressentir, ou les haptiques involontaires où les formes d'onde ne produisent pas les motifs comme prévu.