Implementa la sensazione tattile

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.

Diagramma dei casi d'uso dell'aptica per sviluppatori di app e produttori di dispositivi

Figura 1. Creazione di conoscenze tra produttori e sviluppatori di dispositivi

Lista di controllo per l'implementazione dell'aptica

  1. Implementare le costanti

    • Elenco di costanti per implementare l'aptica.
  2. Mappare le costanti tra HAL e API

  3. Valuta l'hardware

    • 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.

Diagramma di flusso del processo di implementazione dell'aptica

Figura 2. Effetti dell'implementazione

Diagramma di flusso dei passaggi per l'implementazione delle primitive

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.

  1. EFFECT_CLICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e i tempi configurati in frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern .

  2. EFFECT_HEAVY_CLICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e i tempi configurati in frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e i tempi (0, 30, 100, 30).

  4. EFFECT_TICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e i tempi configurati in frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Diagramma di flusso dei passaggi per testare il feedback tattile

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.

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ì.

Diagramma della gamma costante dell'HAL e delle ampiezze di feedback

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 .

Modello discreto per la mappatura costante HAL-API

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.

Intervallo costante HAL per trama e ampiezza

Figura 7. Intervallo costante HAL per texture (HAL_H0) e scala di ampiezza (S)

Modello continuo per la mappatura costante HAL-API

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.

Aumentare la variazione 1

Aumentare la variazione 2

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 .

Forma d'onda di un breve effetto tattile personalizzato

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.

Forma d'onda dell'effetto tattile con variazione di ampiezza

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.

Diagramma di flusso della valutazione soggettiva dell'effetto tattile

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.