Implementazione di Haptics

I produttori di dispositivi sono generalmente considerati i proprietari delle risorse private create per ciascun dispositivo. In quanto tali, 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 nell'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 di 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 gioca un ruolo fondamentale nel garantire che i produttori possano implementare le API tattili di Android su ogni dispositivo.

Questa pagina fornisce un elenco di controllo dettagliato per impostare la conformità hardware per il miglior utilizzo delle API aptiche di Android.

La figura seguente illustra la creazione di conoscenze comuni tra produttori e sviluppatori di dispositivi, che è un passaggio fondamentale nella creazione di un ecosistema coeso.

Diagramma dei casi d'uso aptici 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 di Haptics

  1. Costanti di implementazione

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

  3. Valuta l'hardware

    • 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 la tecnologia aptica.

Diagramma di flusso del processo di implementazione aptica

Figura 2. Effetti di implementazione

Diagramma di flusso dei passaggi per l'implementazione delle primitive

Figura 3. Implementazione delle primitive

Verificare lo stato di implementazione delle seguenti costanti aptiche.

Costanti aptiche Posizioni 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 sono chiamati 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, 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 ottenere le migliori prestazioni su tali dispositivi.

  1. EFFECT_CLICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e le temporizzazioni configurate 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 le temporizzazioni configurate 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 le temporizzazioni (0, 30, 100, 30).

  4. EFFECT_TICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e le temporizzazioni configurate in frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Diagramma di flusso dei passaggi per testare il feedback aptico

Figura 4. Implementazione delle costanti di feedback

Controlla lo stato delle seguenti costanti di feedback pubblico.

Costanti aptiche Posizioni 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 sono chiamati da performHapticFeedback() .

Passaggio 2: mappa 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. Ogni entità nell'HAL rappresenta un'ampiezza aptica diversa.
    • Questo modello è un requisito minimo necessario per implementare l'UX 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 texture aptiche. 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 un uso ottimale delle più recenti API aptiche), si consiglia di implementare il proprio hardware utilizzando questo modello.

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 aptiche con ampiezza discreta il dispositivo può definire nell'HAL. Una domanda specifica strutturata attorno a questa nozione si presenta così: 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 aptica. I dispositivi con componenti hardware più avanzati producono una gamma più ampia di livelli di ampiezza discreti e possono definire più forme d'onda aptiche nell'HAL. La mappatura costante HAL-API prende la costante HAL (usando l'ampiezza media come linea di base), quindi organizza effetti più forti o più deboli da lì.

Diagramma della gamma costante HAL e delle ampiezze di feedback

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 vengono segmentate si basa sui principi UX per gli eventi di input associati. Per ulteriori informazioni, vedere Haptics UX Design .

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, considera la possibilità di unire le costanti HAL di livello di ampiezza media e alta. 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 media. Se il tuo dispositivo supporta solo una costante HAL con ampiezza discreta, considera la possibilità di unire tutti e tre i livelli in uno.

Modello continuo

Il modello continuo con scalabilità in ampiezza può essere applicato per definire costanti HAL. Un fattore di scala ( S ) può essere applicato alle costanti HAL (ad esempio, HAL_H0 , HAL_H1 ) per produrre l'HAL in scala ( HAL_H0 x S ). In questo caso, l'HAL in scala 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 aptiche che desiderano fornire.

Intervallo costante HAL per struttura e ampiezza

Figura 7. Intervallo costante HAL per struttura (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 aptiche piuttosto che diverse ampiezze; il fattore di scala ( S ) può configurare l'ampiezza. Tuttavia, poiché la percezione della trama (ad esempio, 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.

Variazione crescente 1

Variazione crescente 2

Figura 9. Aumento della variazione con la 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 trama .

Passaggio 3: valutare l'hardware

La valutazione dell'hardware implica la definizione di tre effetti tattili, etichettati come Effetti 1, 2 e 3 per questa valutazione specifica.

Effetto 1: costanti aptiche corte predefinite

La costante VibrationEffect.EFFECT_CLICK è l'effetto di base o il denominatore comune nella mappatura HAL-API fornita nel passaggio 2. Viene 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 sensazione tattile chiara .

Effetto 2: breve effetto tattile personalizzato

La costante VibrationEffect.createOneShot(20,255) è per effetti aptici personalizzati. Per brevi impulsi personalizzati singoli, 20 ms è la soglia massima consigliata per definire la durata. Un singolo impulso più lungo di 20 ms non è consigliato perché è percepito come una vibrazione ronzante .

Forma d'onda di breve effetto tattile personalizzato

Figura 10. Effetto tattile personalizzato breve

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 aptici personalizzati è uno degli indicatori per valutare le capacità del dispositivo per effetti aptici ricchi . I timings [] e le amplitudes [] consigliati sono rispettivamente {500, 500} e {128, 255} , che presentano un trend crescente di ampiezza dal 50% al 100%, con una frequenza di campionamento di 500 ms.

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

Figura 11. Effetto aptico lungo personalizzato con variazione di ampiezza

Per verificare le capacità 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.

Diagramma di flusso della valutazione soggettiva dell'effetto aptico

Figura 12. Valutazione del soggetto dell'effetto tattile 1, 2 e 3

Esecuzione di 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 tattili con ampiezze percepibili dall'uomo.

Una domanda specifica strutturata attorno a questa nozione si presenta così: il dispositivo può produrre effetti tattili facilmente percepibili dagli utenti come previsto? Rispondere a questa domanda consente di evitare l' effetto tattile non riuscito , incluso l'effetto tattile impercettibile che gli utenti non possono percepire o l'effetto tattile non intenzionale in cui le forme d'onda non producono pattern come previsto.