Implementa la tecnologia aptica

I produttori di dispositivi sono generalmente considerati i proprietari delle risorse private create per ogni dispositivo. Di conseguenza, le loro attività di ingegneria sono spesso incentrate su una base per dispositivo; viene dedicato poco o nessun impegno alla coerenza degli altri dispositivi nell'ecosistema.

Al contrario, gli sviluppatori si impegnano a creare app che funzionino su tutti gli smartphone Android nell'ecosistema, indipendentemente dalle specifiche tecniche di ciascun dispositivo. Questa differenza di approccio può causare un problema di frammentazione, ad esempio le funzionalità hardware di alcuni smartphone non corrispondono alle aspettative degli sviluppatori di app. Pertanto, se le API aptica funzionano su alcuni smartphone Android, ma non su altri, il risultato è un ecosistema incoerente. Ecco perché la configurazione hardware svolge un ruolo fondamentale per garantire che i produttori possano implementare le API Android per l'aptica su ogni dispositivo.

Questa pagina fornisce un elenco di controllo dettagliato per configurare la conformità dell'hardware per un utilizzo ottimale delle API di tecnologia aptica di Android.

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

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

Figura 1. Condivisione delle conoscenze tra produttori di dispositivi e sviluppatori

Elenco di controllo per l'implementazione dell'aptica

  1. Implementare costanti

    • Elenco di costanti per implementare la tecnologia aptica.
  2. Mappa le costanti tra HAL e API

  3. Valutare l'hardware

    • Istruzioni sugli effetti aptico target. Segui queste istruzioni per eseguire rapide verifiche sull'hardware.

Di seguito esamineremo ciascuno di questi passaggi in maggiore dettaglio.

Passaggio 1: implementa 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 della tecnologia aptica

Figura 2. Implementazione degli effetti

Diagramma di flusso dei passaggi per l'implementazione delle primitive

Figura 3. Implementazione delle primitive

Controlla lo stato di implementazione delle seguenti costanti aptiche.

Costanti aptica Sedi e riepiloghi
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK La VibrationEffect class
costanti di aptica 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 energetici, come EFFECT_CLICK e EFFECT_HEAVY_CLICK, che vengono chiamati da createPredefined().
PRIMITIVE_TICK, PRIMITIVE_CLICK, PRIMITIVE_LOW_TICK>, PRIMITIVE_SLOW_RISE, PRIMITIVE_QUICK_RISE, PRIMITIVE_QUICK_FALL, PRIMITIVE_SPIN, PRIMITIVE_THUD Le costanti di aptica in VibrationEffect.Composition della VibrationEffect.Composition classe
sono consentite per avere un'intensità scalabile, che viene richiamata da addPrimitive(int primitiveId, float scale, int delay).

Le vibrazioni alternative descritte di seguito vengono eseguite sui dispositivi che non implementano le costanti VibrationEffect. Ti consigliamo di aggiornare queste configurazioni per ottenere il massimo rendimento su questi dispositivi.

  1. EFFECT_CLICK

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

  2. EFFECT_HEAVY_CLICK

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

  3. EFFECT_DOUBLE_CLICK

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

  4. EFFECT_TICK

    Vibrazione con forma d'onda creata con VibrationEffect.createWaveform e i tempi configurati su 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 Località e riepiloghi
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 La classe HapticFeedbackConstants
Le costanti aptica in HapticFeedbackConstants assistono gli eventi di input con determinati elementi dell'interfaccia utente, come KEYBOARD_PRESS e KEYBOARD_RELEASE, che vengono chiamati daperformHapticFeedback().

Passaggio 2: mappa le costanti tra HAL e API

Il passaggio 2 illustra le mappature consigliate tra le costanti HAL pubbliche e le costanti API. Se l'hardware valutato nel passaggio 1 non implementa le costanti HAL, il passaggio 2 deve essere utilizzato per aggiornare i pattern di riserva descritti nel passaggio 1 in modo da 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'esperienza utente tattile di base.
    • Un'esperienza tattile più avanzata richiede hardware e un modello avanzati (modello continuo).
  • Modello continuo (avanzato)

    • La trama e l'ampiezza sono le variabili chiave di questo modello. Ogni entità nell'HAL rappresenta diverse texture aptica. L'ampiezza di ogni entità HAL è controllata dal fattore di scala (S).
    • Questo modello richiede hardware avanzato. Se gli OEM vogliono utilizzare un'esperienza utente tattile avanzata con VibrationEffect.Composition (per un utilizzo ottimale delle API di aptica più recenti), è consigliabile implementare il loro hardware utilizzando questo modello.

Modello discreto

È consigliabile mappare tutte le costanti pubbliche fornite nell'API con le costanti HAL appropriate. Per iniziare questa procedura, scopri quante forme d'onda aptica con ampiezza discreta può definire il dispositivo nell'HAL. Una domanda specifica strutturata attorno a questa nozione è la seguente: Quanti effetti haptici a singolo impulso con differenze di ampiezza percepibili dall'uomo possono essere definiti nel mio smartphone? La risposta a questa domanda determina la mappatura.

La definizione delle costanti HAL è un processo dipendente dall'hardware. Ad esempio, un telefono di livello base potrebbe avere solo le funzionalità hardware per produrre un'unica forma d'onda aptica. I dispositivi con componenti hardware più avanzati producono una gamma più ampia di livelli di ampiezza discreta e possono definire più forme d'onda aptiche nell'HAL. La mappatura della costante HAL-API prende la costante HAL (utilizzando l'ampiezza media come base di riferimento), quindi organizza gli effetti più forti o più deboli da lì.

Diagramma dell'intervallo costante HAL e delle ampiezze di feedback

Figura 5. Intervallo costante HAL per ampiezza

Quando è 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ò suddividere una singola costante dell'API di impulso in fino a tre gruppi discreti di livelli di ampiezza. Il modo in cui le costanti dell'API sono segmentate si basa su principi UX per gli eventi di input associati. Per saperne di più, consulta Design UX per l'aptica.

Modello discreto per la mappatura delle costanti HAL-API

Figura 6. Mappatura delle costanti 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 medio e alto. Un esempio di questa nozione in pratica è la mappatura di EFFECT_CLICK e EFFECT_HEAVY_CLICK alla stessa costante HAL, ovvero la costante HAL del livello di ampiezza medio. Se il dispositivo supporta solo una costante HAL con ampiezza discreta, valuta la possibilità di unire tutti e tre i livelli in uno.

Modello continuo

È possibile applicare il modello continuo con scalabilità dell'ampiezza 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 in figura 7. Utilizzando la scalabilità dell'ampiezza del modello continuo, un dispositivo può memorizzare un numero ridotto di costanti HAL con texture distinte 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 texture aptica diverse che vogliono 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 delle costanti HAL-API

Figura 8. Mappatura delle costanti HAL-API: modello continuo

Nel modello continuo, costanti HAL diverse rappresentano texture aptica diverse anziché ampiezze diverse; 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, è consigliabile combinare la trama e il fattore di scala (nella procedura di progettazione della mappatura dell'API HAL).

La figura 7 illustra la mappatura delle costanti aumentando la variazione da un HAL a molte costanti API con scalabilità dell'ampiezza.

Variazione crescente 1

Aumento della variazione 2

Figura 9. Aumento della variabilità con la scalabilità di Amplitude

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 distinta distinzione utilizzando costanti HAL diverse. Questo approccio è consigliato se vuoi aggiungere variazioni alla texture.

Passaggio 3: valuta l'hardware

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

Effetto 1: costanti di aptica brevi predefinite

La costante VibrationEffect.EFFECT_CLICK è l'effetto di base o il denominatore comune nella mappatura HAL-API fornita nel passaggio 2. È mappato con l'effetto più utilizzato, HapticFeedbackConstants.KEYBOARD_PRESS. La valutazione di questo effetto aiuta a determinare l'idoneità del dispositivo target alla tecnologia aptica chiara.

Effetto 2: breve effetto aptico personalizzato

La costante VibrationEffect.createOneShot(20,255) è per gli effetti aptico personalizzati. Per impulsi personalizzati brevi e singoli, 20 ms è la soglia massima consigliata per definire la durata. Un singolo impulso superiore a 20 ms non è consigliato perché viene percepito come una vibrazione fastidiosa.

Forma d'onda di un breve effetto aptico personalizzato

Figura 10. Breve effetto aptico personalizzato

Effetto 3: effetto aptico personalizzato lungo con variazione di ampiezza

La costante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) è destinata a effetti personalizzati lunghi con variazione di ampiezza. La capacità di produrre ampiezze diverse per effetti aptico personalizzati è uno degli indicatori per valutare le funzionalità del dispositivo per la tecnologia aptica avanzata. I valori consigliati per timings [] e 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.

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

Figura 11. Effetto aptico personalizzato lungo con variazione di ampiezza

Per verificare le funzionalità hardware del controllo dell'ampiezza per l'effetto 3, usa il metodo Vibrator.hasAmplitudeControl(). Il risultato deve essere true per eseguire VibrationEffect.createWaveform con un'ampiezza variabile come previsto.

Diagramma di flusso della valutazione dell'effetto aptico soggettivo

Figura 12. Valutazione da parte del soggetto dell'effetto aptico 1, 2 e 3

Esegui una valutazione soggettiva

Per un rapido controllo della coerenza, esegui prima una valutazione soggettiva. Lo scopo della valutazione soggettiva è osservare l'ampiezza degli effetti aptico per determinare se il dispositivo può generare feedback aptico con ampiezze percepibili dall'uomo.

Una domanda specifica strutturata attorno a questa nozione ha il seguente aspetto: Il dispositivo è in grado di produrre effetti aptici percepibili per gli utenti come previsto? La risposta a questa domanda ti aiuta a evitare feedback aptico non riusciti, tra cui feedback aptico impercettibili che gli utenti non riescono a sentire o feedback aptico indesiderati in cui le forme d'onda non producono schemi come previsto.

Eseguire una valutazione avanzata

Ti consigliamo vivamente di eseguire valutazioni avanzate della qualità. Le valutazioni della qualità avanzate caratterizzano gli attributi quantificabili degli effetti aptico per implementare una tecnologia aptica di qualità. Al termine, i produttori di dispositivi dovrebbero essere in grado di diagnosticare lo stato attuale del feedback aptico, il che significa che possono impostare obiettivi per migliorare la qualità complessiva. Consulta Valutazione dell'hardware.