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 vai 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. Essa diferença de abordagem pode causar um problema de fragmentação, por exemplo, os recursos 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 as APIs hápticas do Android em todos os dispositivos.
Esta página fornece uma lista de verificação passo a passo para configurar a conformidade de hardware para o melhor uso das APIs hápticas do Android.
A figura abaixo ilustra a construção de conhecimento comum entre fabricantes e desenvolvedores de dispositivos, que é uma etapa crítica na criação de um ecossistema coeso.
Figura 1. Construindo conhecimento entre fabricantes de dispositivos e desenvolvedores
Lista de verificação de implementação Haptics
- Lista de constantes para implementar haptics.
Mapear constantes entre HAL e API
- Recomendações de mapeamento entre constantes API públicas ( marcadores nomeados na estrutura) e constantes HAL, que implementam os marcadores.
- Consulte Princípios de design para orientar o mapeamento recomendado para saber mais sobre esse processo.
- Instruções sobre os efeitos hápticos do 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 seu dispositivo atende aos requisitos mínimos para implementar haptics.
Figura 2. Efeitos de implementação
Figura 3. Implementando primitivas
Verifique o status de implementação das seguintes constantes hápticas.
constantes hápticas | Locais e resumos |
---|---|
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK | classe VibrationEffect As constantes hápticas em VibrationEffect não incluem nenhuma noção de eventos de entrada e não possuem elementos de interface do usuário. 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 Constantes hápticas 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 serão executadas em dispositivos que não implementam as constantes VibrationEffect
. Recomenda-se atualizar essas configurações para obter o melhor desempenho nesses dispositivos.
EFFECT_CLICK
Vibração de forma de onda criada com
VibrationEffect.createWaveform
e os tempos configurados emframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
.EFFECT_HEAVY_CLICK
Vibração de forma de onda criada com
VibrationEffect.createWaveform
e os tempos configurados emframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
.EFFECT_DOUBLE_CLICK
Vibração da forma de onda criada com
VibrationEffect.createWaveform
e os tempos (0, 30, 100, 30).EFFECT_TICK
Vibração de forma de onda criada com
VibrationEffect.createWaveform
e os tempos configurados emframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
.
Figura 4. Implementando constantes de feedback
Verifique o status das seguintes constantes de feedback público.
constantes hápticas | Locais e resumos |
---|---|
| Classe HapticFeedbackConstants As constantes Haptic em HapticFeedbackConstants auxiliam eventos de entrada com determinados elementos da interface do usuário, como KEYBOARD_PRESS e KEYBOARD_RELEASE , que são chamados por performHapticFeedback() . |
Etapa 2: Mapear constantes entre HAL e API
A Etapa 2 apresenta os mapeamentos recomendados entre constantes HAL públicas e constantes API. Se o hardware avaliado na Etapa 1 não implementar as constantes HAL, a Etapa 2 deve ser usada para atualizar os padrões de fallback descritos na Etapa 1 para gerar saídas semelhantes. O mapeamento é assistido 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 o UX háptico básico.
- Uma UX háptica mais avançada requer hardware avançado e um modelo avançado (modelo contínuo).
Modelo contínuo (avançado)
- A textura e a amplitude são as variáveis chave 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 quiserem usar a UX háptica avançada com
VibrationEffect.Composition
(para o melhor uso das APIs hápticas mais recentes), é recomendável implementar seu hardware usando esse modelo.
- A textura e a amplitude são as variáveis chave deste modelo. Cada entidade no HAL representa diferentes texturas hápticas. A amplitude de cada entidade HAL é controlada pelo fator de escala (
modelo discreto
Mapear todas as constantes públicas fornecidas na API com as constantes HAL apropriadas é recomendado. Para iniciar esse 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 é a seguinte: quantos efeitos hápticos de impulso único com diferenças de amplitude perceptíveis por humanos podem ser definidos em meu telefone? A resposta a esta pergunta determina o mapeamento.
A definição das constantes HAL é um processo dependente do hardware. Por exemplo, um telefone básico pode ter apenas os recursos de hardware para produzir uma única forma de onda háptica. Dispositivos com componentes de hardware mais avançados produzem uma gama mais ampla de níveis de amplitude discretos e podem definir várias formas de onda hápticas no HAL. O mapeamento da constante HAL-API usa a constante HAL (usando a amplitude média como linha de base) e organiza os efeitos mais fortes ou mais fracos a partir daí.
Figura 5. Faixa da constante HAL por amplitude
Definido o número de constantes HAL com amplitude discreta, é hora de mapear as constantes HAL e API pelo número de constantes HAL. Esse processo de mapeamento pode segmentar uma única constante API de impulso em até três grupos discretos de níveis de amplitude. A maneira como as constantes de API são segmentadas é baseada em princípios de UX para acompanhamento de eventos de entrada. Para obter mais informações, consulte Haptics UX design .
Figura 6. Mapeamento da constante HAL-API: modelo discreto
Se o seu dispositivo suportar apenas duas constantes HAL com amplitudes discretas, considere mesclar as 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 do nível de amplitude média. Se o seu dispositivo oferece suporte a 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 escalado ( HAL_H0
x S
). Nesse caso, o HAL dimensionado é mapeado para definir constantes API ( HAL_H0
x S1
= H0S1
= EFFECT_TICK
) conforme mostrado na figura 7. Usando 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 hápticas diferentes desejam fornecer.
Figura 7. Faixa da constante HAL por textura (HAL_H0) e escala de amplitude (S)
Figura 8. Mapeamento da 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. No entanto, como a percepção da textura (por exemplo, nitidez) está relacionada à percepção da duração e amplitude, é recomendável 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 um HAL para muitas constantes API com escalabilidade de amplitude.
Figura 9. Variação crescente com escalabilidade de amplitude
Observação: a figura acima ilustra uma instância específica de mapeamento constante, portanto, as convenções de nomenclatura são hipotéticas. A execução desse processo é exclusiva para cada fabricante de dispositivo.
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 de 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 .
Passo 3: Avalie o hardware
A avaliação do hardware envolve a definição de três efeitos hápticos, denominados Efeitos 1, 2 e 3 para esta avaliação específica.
Efeito 1: Constantes hápticas 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
. A avaliação desse efeito ajuda a determinar a prontidão do seu dispositivo de destino para hápticos claros .
Efeito 2: efeito háptico personalizado curto
A constante VibrationEffect.createOneShot(20,255)
é para efeitos hápticos personalizados. Para impulsos personalizados curtos e únicos, 20 ms é o limite máximo recomendado para definir a duração. Um único impulso com mais de 20 ms não é recomendado porque é percebido como uma vibração com zumbido.
Figura 10. Efeito háptico personalizado curto
Efeito 3: Longo efeito háptico personalizado 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 hápticos personalizados é um dos indicadores para avaliar os recursos do dispositivo para hápticos avançados . Os timings []
e amplitudes []
são {500, 500}
e {128, 255}
, respectivamente, que apresentam uma tendência crescente de amplitude de 50% a 100%, com taxa de amostragem de 500 ms.
Figura 11. Efeito háptico personalizado longo com variação de amplitude
Para verificar os recursos de hardware do 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.
Figura 12. Avaliação do sujeito do efeito háptico 1, 2 e 3
Fazendo uma avaliação subjetiva
Para uma rápida verificação de coerência, faça primeiro uma avaliação subjetiva. O objetivo da avaliação subjetiva é observar a amplitude dos efeitos hápticos para determinar se o dispositivo pode gerar hápticos com amplitudes perceptíveis por humanos.
Uma questão específica estruturada em torno dessa noção é a seguinte: o dispositivo pode produzir efeitos hápticos facilmente perceptíveis para os usuários como esperado? Responder a essa pergunta ajuda a evitar hápticos com falha , incluindo hápticos imperceptíveis que os usuários não podem sentir ou hápticos não intencionais em que as formas de onda não produzem padrões como pretendido.