I produttori di dispositivi sono generalmente considerati i proprietari delle risorse private create per ciascun dispositivo. Pertanto, i loro sforzi ingegneristici sono spesso concentrati su una base per dispositivo ; poco o nessuno sforzo va alla coerenza di altri dispositivi nell'ecosistema.
Al contrario, gli sviluppatori si sforzano di creare app che funzionino su tutti i telefoni Android dell'ecosistema, indipendentemente dalle specifiche tecniche di ciascun dispositivo. Questa differenza di approccio può causare un problema di frammentazione, ad esempio, le capacità hardware di alcuni telefoni non corrispondono alle aspettative stabilite dagli sviluppatori dell'app. Quindi, se le API aptiche funzionano su alcuni telefoni Android ma non su altri, il risultato è un ecosistema incoerente. Questo è il motivo per cui la configurazione hardware gioca un ruolo fondamentale nel garantire che i produttori possano implementare le API aptiche di Android su ogni dispositivo.
Questa pagina fornisce un elenco di controllo dettagliato per impostare la conformità dell'hardware per l'utilizzo ottimale delle API aptiche di Android.
La figura seguente illustra la costruzione di una conoscenza comune tra i produttori di dispositivi e gli sviluppatori, che è un passaggio fondamentale nella creazione di un ecosistema coeso.
Figura 1. Creazione di conoscenze tra produttori di dispositivi e sviluppatori
Lista di controllo per l'implementazione di Haptics
- Elenco di costanti per implementare gli aptici.
Mappa le costanti tra HAL e API
- Raccomandazioni di mappatura tra le costanti API pubbliche (denominati segnaposto nel framework) e le costanti HAL, che implementano i segnaposto.
- Vedere Principi di progettazione per guidare la mappatura consigliata per ulteriori informazioni su questo processo.
- Istruzioni sugli effetti tattili del bersaglio. Utilizzare queste istruzioni per eseguire controlli rapidi sull'hardware.
Esploreremo ciascuno di questi passaggi in modo più dettagliato di seguito.
Passaggio 1: implementare le costanti
Esegui questi controlli per determinare se il tuo dispositivo soddisfa i requisiti minimi per implementare il feedback aptico.
Figura 2. Implementazione degli effetti
Figura 3. Implementazione delle primitive
Controlla lo stato di implementazione delle seguenti costanti tattili.
Costanti tattili | Luoghi e riassunti |
---|---|
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK | Classe VibrationEffect Le costanti aptiche in VibrationEffect non includono alcuna nozione di eventi di input e non hanno elementi dell'interfaccia utente. Le costanti includono invece la nozione di livelli di energia, come EFFECT_CLICK e EFFECT_HEAVY_CLICK , che vengono chiamate da createPredefined() . |
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD | Classe VibrationEffect.Composition Le costanti aptiche in VibrationEffect.Composition possono avere un'intensità scalabile, che viene chiamata da addPrimitive(int primitiveId, float scale, int delay) . |
Le vibrazioni alternative descritte di seguito verranno eseguite su dispositivi che non implementano le costanti VibrationEffect
. Si consiglia di aggiornare queste configurazioni per funzionare al meglio su tali dispositivi.
EFFECT_CLICK
Vibrazione della forma d'onda creata con
VibrationEffect.createWaveform
e i tempi configurati inframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
.EFFECT_HEAVY_CLICK
Vibrazione della forma d'onda creata con
VibrationEffect.createWaveform
e le temporizzazioni configurate inframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
.EFFECT_DOUBLE_CLICK
Vibrazione della forma d'onda creata con
VibrationEffect.createWaveform
e le temporizzazioni (0, 30, 100, 30).EFFECT_TICK
Vibrazione della forma d'onda creata con
VibrationEffect.createWaveform
e i tempi configurati inframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
.
Figura 4. Implementazione delle costanti di feedback
Controlla lo stato delle seguenti costanti di feedback pubblico.
Costanti tattili | Luoghi e riassunti |
---|---|
| Classe HapticFeedbackConstants Le costanti aptiche in HapticFeedbackConstants assistono gli eventi di input con alcuni elementi dell'interfaccia utente, come KEYBOARD_PRESS e KEYBOARD_RELEASE , che vengono chiamati da performHapticFeedback() . |
Passaggio 2: mappare le costanti tra HAL e API
Il passaggio 2 presenta i mapping consigliati tra le costanti HAL pubbliche e le costanti API. Se l'hardware valutato nel passaggio 1 non implementa le costanti HAL, è necessario utilizzare il passaggio 2 per aggiornare i modelli di fallback descritti nel passaggio 1 per generare output simili. La mappatura è assistita da due diversi modelli predefiniti.
Modello discreto (semplice)
- L'ampiezza è la variabile chiave di questo modello. Ogni entità nell'HAL rappresenta una diversa ampiezza tattile.
- Questo modello è un requisito minimo necessario per implementare l'esperienza utente aptica di base.
- Una UX aptica più avanzata richiede hardware avanzato e un modello avanzato (modello continuo).
Modello continuo (avanzato)
- Texture e ampiezza sono le variabili chiave di questo modello. Ogni entità nell'HAL rappresenta diverse trame tattili. L'ampiezza di ciascuna entità HAL è controllata dal fattore di scala (
S
). - Questo modello richiede hardware avanzato. Se gli OEM desiderano utilizzare l'esperienza utente aptica avanzata con
VibrationEffect.Composition
(per l'utilizzo ottimale delle API aptiche più recenti), è consigliabile implementare l'hardware utilizzando questo modello.
- Texture e ampiezza sono le variabili chiave di questo modello. Ogni entità nell'HAL rappresenta diverse trame tattili. L'ampiezza di ciascuna entità HAL è controllata dal fattore di scala (
Modello discreto
Si consiglia di mappare tutte le costanti pubbliche fornite nell'API con le costanti HAL appropriate. Per iniziare questo processo, scopri quante forme d'onda tattili con ampiezza discreta il dispositivo può definire nell'HAL. Una domanda specifica strutturata attorno a tale nozione è simile a questa: quanti effetti tattili a impulso singolo con differenze di ampiezza percepibili dall'uomo possono essere definiti nel mio telefono? La risposta a questa domanda determina la mappatura.
La definizione delle costanti HAL è un processo dipendente dall'hardware. Ad esempio, un telefono entry-level potrebbe avere solo le capacità hardware per produrre una singola forma d'onda tattile. I dispositivi con componenti hardware più avanzati producono una gamma più ampia di livelli di ampiezza discreti e possono definire più forme d'onda tattili nell'HAL. La mappatura costante HAL-API prende la costante HAL (utilizzando l'ampiezza media come linea di base), quindi organizza effetti più forti o più deboli da lì.
Figura 5. Intervallo costante HAL per ampiezza
Quando viene definito il numero di costanti HAL con ampiezza discreta, è il momento di mappare le costanti HAL e API in base al numero di costanti HAL. Questo processo di mappatura può segmentare una singola costante API di impulso in un massimo di tre gruppi discreti di livelli di ampiezza. Il modo in cui le costanti API sono segmentate si basa sui principi UX per gli eventi di input associati. Per ulteriori informazioni, vedere Haptics UX design .
Figura 6. Mappatura costante HAL-API: modello discreto
Se il tuo dispositivo supporta solo due costanti HAL con ampiezze discrete, valuta la possibilità di unire le costanti HAL di livello di ampiezza media e alta. Un esempio pratico di questa nozione sarebbe la mappatura EFFECT_CLICK
e EFFECT_HEAVY_CLICK
sulla stessa costante HAL, che sarebbe la costante HAL del livello di ampiezza media. Se il tuo dispositivo supporta solo una costante HAL con ampiezza discreta, valuta la possibilità di unire tutti e tre i livelli in uno solo.
Modello continuo
Il modello continuo con scalabilità dell'ampiezza può essere applicato per definire le costanti HAL. Un fattore di scala ( S
) può essere applicato alle costanti HAL (ad esempio, HAL_H0
, HAL_H1
) per produrre l'HAL ridimensionato ( HAL_H0
x S
). In questo caso, l'HAL ridimensionato viene mappato per definire le costanti API ( HAL_H0
x S1
= H0S1
= EFFECT_TICK
) come mostrato nella figura 7. Utilizzando la scalabilità dell'ampiezza del modello continuo, un dispositivo può memorizzare un piccolo numero di costanti HAL con trame distintive e aggiungere variazioni di ampiezza regolando il fattore di scala ( S
). I produttori di dispositivi possono definire il numero di costanti HAL in base al numero di diverse trame tattili che desiderano fornire.
Figura 7. Intervallo costante HAL per texture (HAL_H0) e scala di ampiezza (S)
Figura 8. Mappatura costante HAL-API: modello continuo
Nel modello continuo, diverse costanti HAL rappresentano diverse trame tattili piuttosto che diverse ampiezze; il fattore di scala ( S
) può configurare l'ampiezza. Tuttavia, poiché la percezione della trama (ad esempio, la nitidezza) è correlata alla percezione della durata e dell'ampiezza, si consiglia di combinare la trama e il fattore di scala (nel processo di progettazione della mappatura HAL-API).
La Figura 7 illustra la mappatura costante aumentando la variazione da un HAL a molte costanti API con scalabilità dell'ampiezza.
Figura 9. Variazione crescente con scalabilità dell'ampiezza
Nota: la figura sopra illustra un'istanza specifica di mappatura costante, quindi le convenzioni di denominazione sono ipotetiche. L'esecuzione di questo processo è unica per ciascun produttore di dispositivi.
Per tutte le costanti API scalabili come PRIMITIVE_TICK
e PRIMITIVE_CLICK
in VibrationEffect.Composition
, il livello di energia della costante API dipende dal parametro float scale
quando la costante API viene dichiarata tramite addPrimitive(int primitiveID, float scale, int delay)
. PRIMITIVE_TICK
e PRIMITIVE_CLICK
possono essere progettati con una chiara distinzione utilizzando diverse costanti HAL. Questo approccio è consigliato se si desidera aggiungere variazioni alla texture .
Passaggio 3: valutare l'hardware
La valutazione dell'hardware prevede la definizione di tre effetti tattili, denominati Effetti 1, 2 e 3 per questa valutazione specifica.
Effetto 1: costanti tattili brevi predefinite
La costante VibrationEffect.EFFECT_CLICK
è l'effetto di base o denominatore comune nella mappatura HAL-API fornita nel passaggio 2. È mappata con l'effetto più utilizzato, HapticFeedbackConstants.KEYBOARD_PRESS
. La valutazione di questo effetto aiuta a determinare la prontezza del dispositivo di destinazione per una chiara percezione tattile .
Effetto 2: breve effetto tattile personalizzato
La costante VibrationEffect.createOneShot(20,255)
è per gli effetti tattili personalizzati. Per impulsi personalizzati brevi e singoli, 20 ms è la soglia massima consigliata per definire la durata. Un singolo impulso più lungo di 20 ms non è consigliato perché viene percepito come una vibrazione ronzante .
Figura 10. Breve effetto tattile personalizzato
Effetto 3: lungo effetto tattile personalizzato con variazione di ampiezza
La costante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)
è per effetti personalizzati lunghi con variazione di ampiezza. La capacità di produrre ampiezze variabili per effetti tattili personalizzati è uno degli indicatori per valutare le capacità del dispositivo per i rich tattili . I timings []
e le amplitudes []
sono {500, 500}
e {128, 255}
, rispettivamente, che presentano una tendenza crescente dell'ampiezza dal 50% al 100%, con una frequenza di campionamento di 500 ms.
Figura 11. Effetto tattile personalizzato lungo con variazione di ampiezza
Per verificare le funzionalità hardware del controllo dell'ampiezza per Effect 3, utilizzare il metodo Vibrator.hasAmplitudeControl()
. Il risultato deve essere true
per eseguire VibrationEffect.createWaveform
con ampiezza variabile come previsto.
Figura 12. Valutazione del soggetto dell'effetto tattile 1, 2 e 3
Esecuzione di una valutazione soggettiva
Per un rapido controllo di coerenza, eseguire prima una valutazione soggettiva. L'obiettivo della valutazione soggettiva è osservare l'ampiezza degli effetti tattili per determinare se il dispositivo può generare tattili con ampiezze percepibili dall'uomo.
Una domanda specifica strutturata attorno a questa nozione è la seguente: il dispositivo può produrre effetti tattili facilmente percepibili dagli utenti come previsto? Rispondere a questa domanda ti aiuta a evitare feedback aptici non riusciti , inclusi feedback aptici impercettibili che gli utenti non possono percepire o feedback aptici non intenzionali in cui le forme d'onda non producono modelli come previsto.