I produttori di dispositivi sono generalmente considerati i proprietari del patrimonio privato creato per ciascun dispositivo. Pertanto, i loro sforzi ingegneristici sono spesso concentrati sui singoli dispositivi ; poco o nessuno sforzo è dedicato alla coerenza degli 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 tattili funzionano su alcuni telefoni Android ma non su altri, il risultato è un ecosistema incoerente. Questo è il motivo per cui la configurazione hardware svolge un ruolo fondamentale nel garantire che i produttori possano implementare le API aptiche Android su ogni dispositivo.
Questa pagina fornisce un elenco di controllo passo passo per configurare la conformità hardware per il miglior utilizzo delle API aptiche di Android.
La figura seguente illustra la creazione di una conoscenza comune tra produttori di dispositivi e sviluppatori, che rappresenta un passaggio fondamentale nella creazione di un ecosistema coeso.
Figura 1. Creazione di conoscenze tra produttori e sviluppatori di dispositivi
Lista di controllo per l'implementazione dell'aptica
- Elenco di costanti per implementare l'aptica.
Mappare le costanti tra HAL e API
- Consigli per la mappatura tra costanti API pubbliche (denominate segnaposto nel framework) e costanti HAL, che implementano i segnaposto.
- Consulta Principi di progettazione per guidare la mappatura consigliata per ulteriori informazioni su questo processo.
- Istruzioni sugli effetti tattili target. Utilizza queste istruzioni per eseguire controlli rapidi sul tuo hardware.
Esploreremo ciascuno di questi passaggi in maggior dettaglio di seguito.
Passaggio 1: implementare le costanti
Esegui questi controlli per determinare se il tuo dispositivo soddisfa i requisiti minimi per implementare la funzionalità aptica.
Figura 2. Effetti dell'implementazione
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 vengono eseguite su dispositivi che non implementano le costanti VibrationEffect
. Si consiglia di aggiornare queste configurazioni per ottenere le migliori prestazioni 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 i tempi configurati inframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
.EFFECT_DOUBLE_CLICK
Vibrazione della forma d'onda creata con
VibrationEffect.createWaveform
e i tempi (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 |
---|---|
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 Le costanti aptiche in HapticFeedbackConstants assistono gli eventi di input con determinati 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 al fine di generare output simili. La mappatura è assistita da due diversi modelli predefiniti.
Modello discreto (semplice)
- L’ampiezza è la variabile chiave di questo modello. Ciascuna entità nell'HAL rappresenta un'ampiezza tattile diversa.
- Questo modello è un requisito minimo necessario per implementare la UX tattile di base.
- Una UX tattile 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 un'esperienza utente tattile avanzata con
VibrationEffect.Composition
(per il miglior utilizzo delle API tattili più recenti), si consiglia di implementare il proprio 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 associare tutte le costanti pubbliche fornite nell'API con le costanti HAL appropriate. Per iniziare questo processo, scoprire quante forme d'onda aptiche con ampiezza discreta il dispositivo può definire nell'HAL. Una domanda specifica strutturata attorno a questo concetto assomiglia 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 un'unica 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 gli effetti più forti o più deboli da lì.
Figura 5. Intervallo costante HAL per ampiezza
Una volta 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 vengono segmentate si basa sui principi UX per gli eventi di input associati. Per ulteriori informazioni, consulta Progettazione UX Haptics .
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 con livello di ampiezza medio e alto. Un esempio di questa nozione in pratica sarebbe la mappatura EFFECT_CLICK
e EFFECT_HEAVY_CLICK
sulla stessa costante HAL, che sarebbe la costante HAL del livello di ampiezza medio. 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à di ampiezza può essere applicato per definire le costanti HAL. È possibile applicare un fattore di scala ( S
) alle costanti HAL (ad esempio, HAL_H0
, HAL_H1
) per produrre l'HAL scalato ( HAL_H0
x S
). In questo caso, l'HAL scalato 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 numero limitato 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 trame tattili diverse 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à di ampiezza.
Figura 9. Variazione crescente con scalabilità dell'ampiezza
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, etichettati 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 il 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 disponibilità del dispositivo di destinazione per una sensazione tattile chiara .
Effetto 2: breve effetto tattile personalizzato
La costante VibrationEffect.createOneShot(20,255)
è per effetti tattili personalizzati. Per impulsi personalizzati brevi e singoli, 20 ms è la soglia massima consigliata per definire la durata. Un singolo impulso di durata superiore a 20 ms non è consigliabile perché viene percepito come una vibrazione ronzante .
Figura 10. Breve effetto tattile personalizzato
Effetto 3: effetto tattile personalizzato lungo 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 una sensazione tattile ricca . I timings []
e amplitudes []
consigliati sono rispettivamente {500, 500}
e {128, 255}
, 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 capacità hardware del controllo dell'ampiezza per l'effetto 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
Eseguire una valutazione soggettiva
Per un rapido controllo della coerenza, eseguire prima una valutazione soggettiva. L'obiettivo della valutazione soggettiva è osservare l'ampiezza degli effetti tattili per determinare se il dispositivo può generare sensazioni tattili con ampiezze percepibili dall'uomo.
Una domanda specifica strutturata attorno a questo concetto si presenta così: il dispositivo può produrre effetti tattili facilmente percepibili dagli utenti come previsto? Rispondere a questa domanda ti aiuta a evitare sensazioni tattili fallite , incluse sensazioni tattili impercettibili che gli utenti non possono percepire o sensazioni tattili involontarie in cui le forme d'onda non producono modelli come previsto.