Implementar sensação tátil

Os fabricantes de dispositivos são geralmente considerados os proprietários dos ativos privados criados para cada dispositivo. Como tal, seus esforços de engenharia geralmente se concentram em cada dispositivo ; pouco ou nenhum esforço é feito para a consistência de outros dispositivos no ecossistema.

Em contraste direto, os desenvolvedores se esforçam para criar aplicativos que funcionem em todos os telefones Android do ecossistema, independentemente das especificações técnicas de cada dispositivo. Esta diferença de abordagem pode causar um problema de fragmentação, por exemplo, as capacidades de hardware de determinados telefones não correspondem às expectativas definidas pelos desenvolvedores de aplicativos. Portanto, se as APIs hápticas funcionam em alguns telefones Android, mas não em outros, o resultado é um ecossistema inconsistente. É por isso que a configuração de hardware desempenha um papel crítico para garantir que os fabricantes possam implementar APIs táteis do Android em todos os dispositivos.

Esta página fornece uma lista de verificação passo a passo para configurar a conformidade do hardware para o melhor uso das APIs táteis do Android.

A figura abaixo ilustra a construção de conhecimento comum entre fabricantes e desenvolvedores de dispositivos, o que é uma etapa crítica na criação de um ecossistema coeso.

Diagrama de casos de uso de sensação tátil para desenvolvedores de aplicativos e fabricantes de dispositivos

Figura 1. Construindo conhecimento entre fabricantes e desenvolvedores de dispositivos

Lista de verificação de implementação de Haptics

  1. Implementar constantes

    • Lista de constantes para implementar a sensação ao toque.
  2. Mapear constantes entre HAL e API

  3. Avalie o hardware

    • Instruções sobre os efeitos táteis alvo. Use estas instruções para realizar verificações rápidas em seu hardware.

Exploraremos cada uma dessas etapas com mais detalhes a seguir.

Etapa 1: implementar constantes

Execute essas verificações para determinar se o seu dispositivo atende aos requisitos mínimos para implementar a sensação ao toque.

Fluxograma do processo de implementação da sensação tátil

Figura 2. Efeitos de implementação

Fluxograma de etapas para implementação de primitivas

Figura 3. Implementando primitivas

Verifique o status de implementação das seguintes constantes táteis.

Constantes táteis Locais e resumos
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK Classe VibrationEffect
As constantes táteis em VibrationEffect não incluem nenhuma noção de eventos de entrada e não possuem elementos de UI. Em vez disso, as constantes incluem a noção de níveis de energia, como EFFECT_CLICK e EFFECT_HEAVY_CLICK , que são chamados por createPredefined() .
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD Classe VibrationEffect.Composition
As constantes táteis em VibrationEffect.Composition podem ter intensidade escalável, que são chamadas por addPrimitive(int primitiveId, float scale, int delay) .

As vibrações alternativas descritas abaixo são realizadas em dispositivos que não implementam as constantes VibrationEffect . Recomenda-se atualizar essas configurações para obter melhor desempenho nesses dispositivos.

  1. EFFECT_CLICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos configurados em frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern .

  2. EFFECT_HEAVY_CLICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos configurados em frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    Vibração da forma de onda criada com VibrationEffect.createWaveform e os tempos (0, 30, 100, 30).

  4. EFFECT_TICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos configurados em frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Fluxograma de etapas para testar feedback tátil

Figura 4. Implementando constantes de feedback

Verifique o status das seguintes constantes de feedback público.

Constantes táteis Locais e resumos
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
Constantes táteis em HapticFeedbackConstants auxiliam eventos de entrada com determinados elementos da UI, como KEYBOARD_PRESS e KEYBOARD_RELEASE , que são chamados por performHapticFeedback() .

Etapa 2: Mapear constantes entre HAL e API

A Etapa 2 apresenta mapeamentos recomendados entre constantes HAL públicas e constantes de API. Se o hardware avaliado na Etapa 1 não implementar as constantes HAL, então a Etapa 2 deverá ser usada para atualizar os padrões de fallback descritos na Etapa 1, a fim de gerar resultados semelhantes. O mapeamento é auxiliado por dois modelos padrão diferentes.

  • Modelo discreto (simples)

    • A amplitude é a variável chave deste modelo. Cada entidade no HAL representa uma amplitude háptica diferente.
    • Este modelo é um requisito mínimo necessário para implementar a UX háptica básica.
    • Uma UX háptica mais avançada requer hardware avançado e um modelo avançado (modelo contínuo).
  • Modelo contínuo (avançado)

    • Textura e amplitude são as principais variáveis ​​deste modelo. Cada entidade no HAL representa diferentes texturas hápticas. A amplitude de cada entidade HAL é controlada pelo fator de escala ( S ).
    • Este modelo requer hardware avançado. Se os OEMs desejam usar UX háptico avançado com VibrationEffect.Composition (para o melhor uso das APIs hápticas mais recentes), é recomendável implementar seu hardware usando este modelo.

Modelo discreto

É recomendado mapear todas as constantes públicas fornecidas na API com constantes HAL apropriadas. Para iniciar este processo, descubra quantas formas de onda hápticas com amplitude discreta o dispositivo pode definir no HAL. Uma questão específica estruturada em torno dessa noção é semelhante a esta: Quantos efeitos táteis de impulso único com diferenças de amplitude perceptíveis pelo homem podem ser definidos no meu telefone? A resposta a esta pergunta determina o mapeamento.

Definir constantes HAL é um processo que depende de hardware. Por exemplo, um telefone básico pode ter apenas os recursos de hardware para produzir uma única forma de onda tátil. Dispositivos com componentes de hardware mais avançados produzem uma gama mais ampla de níveis de amplitude discretos e podem definir múltiplas formas de onda táteis no HAL. O mapeamento constante HAL-API pega a constante HAL (usando a amplitude média como linha de base) e, a partir daí, organiza efeitos mais fortes ou mais fracos.

Diagrama da faixa constante HAL e amplitudes de feedback

Figura 5. Faixa constante HAL por amplitude

Quando o número de constantes HAL com amplitude discreta é definido, é hora de mapear as constantes HAL e API pelo número de constantes HAL. Este processo de mapeamento pode segmentar uma única constante API de impulso em até três grupos discretos de níveis de amplitude. A forma como as constantes da API são segmentadas é baseada nos princípios de UX para acompanhar eventos de entrada. Para obter mais informações, consulte Design Haptics UX .

Modelo discreto para mapeamento constante HAL-API

Figura 6. Mapeamento constante HAL-API: modelo discreto

Se o seu dispositivo suportar apenas duas constantes HAL com amplitudes discretas, considere mesclar constantes HAL de nível de amplitude Média e Alta. Um exemplo dessa noção na prática seria mapear EFFECT_CLICK e EFFECT_HEAVY_CLICK para a mesma constante HAL, que seria a constante HAL de nível de amplitude média. Se o seu dispositivo suportar apenas uma constante HAL com amplitude discreta, considere mesclar todos os três níveis em um.

Modelo contínuo

O modelo contínuo com escalabilidade de amplitude pode ser aplicado para definir constantes HAL. Um fator de escala ( S ) pode ser aplicado às constantes HAL (por exemplo, HAL_H0 , HAL_H1 ) para produzir o HAL escalonado ( HAL_H0 x S ). Neste caso, o HAL dimensionado é mapeado para definir constantes API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) conforme mostrado na figura 7. Ao usar a escalabilidade de amplitude do modelo contínuo, um dispositivo pode armazenar um pequeno número de constantes HAL com texturas distintas. e adicione variações de amplitude ajustando o fator de escala ( S ). Os fabricantes de dispositivos podem definir o número de constantes HAL com base em quantas texturas táteis diferentes desejam fornecer.

Faixa constante HAL por textura e amplitude

Figura 7. Faixa constante HAL por textura (HAL_H0) e escala de amplitude (S)

Modelo contínuo para mapeamento constante HAL-API

Figura 8. Mapeamento constante HAL-API: modelo contínuo

No modelo contínuo, diferentes constantes HAL representam diferentes texturas hápticas em vez de diferentes amplitudes; o fator de escala ( S ) pode configurar a amplitude. Porém, como a percepção da textura (por exemplo, nitidez) está relacionada à percepção da duração e amplitude, recomenda-se combinar a textura e o fator de escala (no processo de design do mapeamento HAL-API).

A Figura 7 ilustra o mapeamento constante aumentando a variação de uma HAL para muitas constantes API com escalabilidade de amplitude.

Aumentando a Varação 1

Aumentando a Varação 2

Figura 9. Variação crescente com escalabilidade de amplitude

Para todas as constantes de API escalonáveis, como PRIMITIVE_TICK e PRIMITIVE_CLICK em VibrationEffect.Composition , o nível de energia da constante de API depende do parâmetro float scale quando a constante de API é declarada por meio de addPrimitive(int primitiveID, float scale, int delay) . PRIMITIVE_TICK e PRIMITIVE_CLICK podem ser projetados com uma distinção clara usando diferentes constantes HAL. Essa abordagem é recomendada se você quiser adicionar variação à textura .

Etapa 3: avaliar o hardware

A avaliação de hardware envolve a definição de três efeitos táteis, denominados Efeitos 1, 2 e 3 para esta avaliação específica.

Efeito 1: Constantes táteis curtas predefinidas

A constante VibrationEffect.EFFECT_CLICK é o efeito de linha de base ou denominador comum no mapeamento HAL-API fornecido na Etapa 2. Ela é mapeada com o efeito mais usado, HapticFeedbackConstants.KEYBOARD_PRESS . Avaliar esse efeito ajuda a determinar a prontidão do seu dispositivo alvo para uma sensação tátil clara .

Efeito 2: efeito tátil personalizado curto

A constante VibrationEffect.createOneShot(20,255) é para efeitos táteis personalizados. Para impulsos personalizados únicos e curtos, 20 ms é o limite máximo recomendado para definir a duração. Um único impulso com duração superior a 20 ms não é recomendado porque é percebido como uma vibração vibrante .

Forma de onda de efeito tátil personalizado curto

Figura 10. Efeito tátil personalizado curto

Efeito 3: Efeito háptico personalizado longo com variação de amplitude

A constante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) é para efeitos personalizados longos com variação de amplitude. A capacidade de produzir amplitudes variadas para efeitos táteis personalizados é um dos indicadores para avaliar as capacidades do dispositivo para uma sensação tátil rica . Os timings [] e amplitudes [] são {500, 500} e {128, 255} , respectivamente, o que apresenta uma tendência crescente de amplitude de 50% a 100%, com taxa de amostragem de 500 ms.

Forma de onda de efeito háptico com variação de amplitude

Figura 11. Efeito háptico personalizado longo com variação de amplitude

Para verificar os recursos de hardware de controle de amplitude para o Efeito 3, use o método Vibrator.hasAmplitudeControl() . O resultado deve ser true para executar VibrationEffect.createWaveform com amplitude variável conforme pretendido.

Fluxograma de avaliação subjetiva do efeito háptico

Figura 12. Avaliação do sujeito do efeito tátil 1, 2 e 3

Faça uma avaliação subjetiva

Para uma rápida verificação de coerência, realize primeiro uma avaliação subjetiva. O objetivo da avaliação subjetiva é observar a amplitude dos efeitos táteis para determinar se o dispositivo pode gerar sensação tátil com amplitudes perceptíveis pelo homem.

Uma questão específica estruturada em torno desta noção é a seguinte: o dispositivo pode produzir efeitos táteis facilmente perceptíveis pelos usuários conforme o esperado? Responder a essa pergunta ajuda a evitar falhas na sensação ao toque , incluindo a sensação ao toque imperceptível que os usuários não conseguem sentir ou a sensação ao toque não intencional, em que as formas de onda não produzem padrões conforme o esperado.