Elementi di base dell'esperienza utente per il framework aptico

Tutti i miglioramenti al framework Android basati sulla tecnologia aptica sono basati sulla tecnologia una serie di principi relativi all'esperienza utente che si evolvono a parità di ritmo. Lo stato attuale principi prevedono la sostituzione della vibrazione vivace con una funzione aptica chiara. esplorando la strana tecnologia aptica avanzata.

Principi relativi all'esperienza utente

Figura 1. Principi attuali

La tabella seguente elenca tutte le API aptica disponibili.

API Metodi Anno di aggiunta
android.view.HapticFeedbackConstants
  • CLIC_CONTESTUALE
  • BATTITO_OROLOGIO
  • CHIAVE_VIRTUALE
  • TASTIERA_TAP
  • PREMI_LUNGO
Prima del 2016
  • TASTIERA_PRESSIONE
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • LANCIO_VIRTUALE_CHIAVE
2017 (Android 8)
  • CONFERMA
  • RIFIUTA
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
android.View
  • performHapticFeedback()
Prima del 2016
android.os.Vibratore
  • vibrazione()
  • hasVibrator()
Prima del 2016
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (Android 11)
EffettoVibrazione
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • TICK_EFFETTO
  • CLIC_EFFETTO
  • Effetto_HEAVY_CLIC
  • EFFETTO_DOPPIO_CLIC
  • createPredefinito()
2019 (Android 10)
android.os.EffettoVibrazione.Composizione
  • TICK_PRIMITIVE
  • PRIMITIVE_CLICK
  • addPrimitive()
  • componi()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsSilentd()
2019 (Android 10)

Vibrazione vivace

Ricorrenti a cercapersone e feature phone, sistemi ERM di bassa qualità ma ad alta efficienza energetica le vibrazioni basate su buzzer sostituiscono le vibrazioni uditive modalità silenziosa. I componenti hardware legacy che producono rumori e rumori fastidiosi i rumori udibili possono danneggiare la UX aptica generando impressioni di bassa qualità (ad ad esempio un telefono rotto e economico).

Cancella feedback aptico

La modalità aptica chiara supporta la sensazione di cambiamenti di stato discreti (ad esempio, modifiche binarie durante il processo di accensione/spegnimento). Data la natura dei invito discreto, feedback aptico chiaro vengono generati come una singola entità (ad ad esempio un effetto aptico per un evento di input).

Android punta a offrire una tecnologia aptica chiara con sensazioni forti ma nitide, piuttosto che di sensazioni vivaci o molle.

Le costanti aptiche predefinite create per supportare la tecnologia aptica chiara includono: per eseguire le operazioni indicate di seguito.

Tra HapticFeedbackConstants:

  • CLOCK_TICK
  • CONFIRM
  • CONTEXT_CLICK
  • GESTURE_END
  • GESTURE_START
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • KEYBOARD_TAP
  • LONG_PRESS
  • REJECT
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY
  • VIRTUAL_KEY_RELEASE

Tra VibrationEffect:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Creare una conoscenza comune tra produttori e sviluppatori di dispositivi è la chiave aumentando la qualità complessiva della tecnologia aptica nell'ecosistema Android. Utilizza la elenco di controllo di base, per la valutazione dell'hardware, e CDD. per scoprire di più sull'implementazione della tecnologia aptica.

Stampa e comunica

Figura 3. Premere e rilasciare.

Tecnologia aptica avanzata

La Tecnologia aptica avanzata è una categoria di tecnologia aptica in crescita che va oltre il singolo effetti basati sugli impulsi. Android mira a supportare una tecnologia aptica avanzata con la componibilità e l'adeguabilità con un piccolo livello di granularità. Le seguenti sono supportati in Android 11 o versioni precedenti.

Tecnologia aptica avanzata

Figura 4. Tecnologia aptica avanzata con texture scorrevole

Trascinamento e scorrimento

Figura 5. Trascinamento e scorrimento

Caso d'uso 1: texture a scorrimento

Se si ripete un effetto aptico mentre il dito scorre su una superficie touch (ad ad esempio trascinare, scorrere ed esplorare la superficie con texture aptica fantasma), gli effetti aptici ripetuti sono preferibilmente nitidi e delicati.

Se il singolo effetto è vivace anziché cristallino, gli intervalli tra le ripetizioni verranno probabilmente cancellate. Il risultato è un lungo passaparola, piuttosto rispetto a più indicatori discreti.

Se l'ampiezza non è abbastanza sottile, l'energia aptica percepita si accumula. ripetizioni, generando una feedback aptico incredibilmente forte alla fine la ripetizione.

Implementa una texture aptica superficiale semplice per i gesti di scorrimento e trascinamento

Utilizza CLOCK_TICK e TEXT_HANDLE_MOVE in HapticFeedbackConstants Queste costanti predefiniscono le caratteristiche di ripetizione e ampiezza.

Crea il tuo effetto

Per creare un effetto personalizzato, componi un design unendo sequenze di PRIMITIVE_CLICK e PRIMITIVE_TICK in VibrationEffect.Composition Puoi regolare le caratteristiche della scala di ripetizione e ampiezza utilizzando addPrimitive(int primitiveID, float scale, int delay). L'assistenza si basa su il CAP_COMPOSE_EFFECTS funzionalità dei Interfaccia Vibrator HAL.

Caso d'uso 2: vibrazione lunga con effetto facilitato

La vibrazione lunga è una vibrazione di ampiezza fluida che passa da 0 a ampiezza target. La vibrazione lunga può generare un'attenzione facilmente percepibile tecnologia aptica. Tuttavia, un'improvvisa vibrazione lunga può spaventare gli utenti in un ambiente silenzioso dell'ambiente circostante e spesso produce rumori forti. Per generare un altro vibrazione prolungata, applica l'effetto di facilitazione all'inizio del vibrazione. Questo produce una transizione di ampiezza fluida che si avvicina ampiezza target.

Applicare l'effetto di variazione

  1. Verifica le funzionalità hardware del controllo dell'ampiezza con android.os.Vibrator.hasAmplitudeControl()

    • Il risultato deve essere true per produrre un effetto di variazione con ampiezza variabile.
  2. Utilizza le funzionalità di VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)

  3. Modifica le serie di timings[] e amplitudes[] per generare di variazione della velocità, come mostrato nella Figura 6.

Vibrazione lunga

Figura 6. Curva di variazione della vibrazione lunga

Caso d'uso 3: feedback aptico con accoppiamento audio

La funzione aptica con accoppiamento audio è uno schema aptico accoppiato al ritmo dell'audio. per attirare l'attenzione dell'utente.

Tecnologia aptica con accoppiamento audio: vantaggi

Per implementare la tecnologia aptica con accoppiamento audio, combina una tecnologia aptica chiara con vibrazioni lunghe. Le sensazioni aptiche forti ma brevi della tecnologia aptica chiara offrono una risposta discreta pattern ritmici. Se combinata con gli alti livelli di stimoli che a lungo la vibrazione è un ottimo modo per attirare l'attenzione dell'utente.

È importante considerare gli schemi ritmici delle sensazioni. Se non ha senso ritmo, l'utente percepisce le sensazioni aptiche come vibrazioni casuali e tende per ignorarli.

Coppia audio

Figura 7. Esempio di tecnologia aptica di coppia audio

Tecnologia aptica con accoppiamento audio: suggerimenti per l'implementazione

L'implementazione della tecnologia aptica con accoppiamento audio richiede una conoscenza di base dei contenuti la riproduzione dei canali audio e aptici. Tieni presente quanto segue.

  • Utilizza la MediaPlayer o SoundPool .

    • Asset in formato OGG con una chiave di metadati speciale (ANDROID_HAPTIC seguito da una serie di canali aptici) indica la presenza di dati aptici e riproduzione con MediaPlayer e SoundPool.
  • Indica il supporto della tecnologia aptica e della riproduzione audio in audio_policy_configuration.xml.

    • Utilizza un profilo di output con canale aptica AUDIO_CHANNEL_OUT_HAPTIC_A|B.
    • Per uno stream di output con canali aptici, ricorda che la tecnologia aptica vengono presentati come canali aggiuntivi nei dati.

    Esempio

    Se la maschera del canale per lo stream di output ha il seguente aspetto:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Quindi ogni campione dovrebbe avere il seguente aspetto:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Modifica AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) a false per riprodurre il canale aptico.

    • Per impostazione predefinita, i canali aptici sono disattivati (true).
    • I casi d'uso includono suonerie e suoni dell'UI con sincronizzazione sincrona feedback aptico e feedback.
  • Vibrator HAL deve implementare il supporto di controllo esterno.

Tecnologia aptica audio accoppiata

Figura 8. Implementazione della tecnologia aptica con accoppiamento audio

Feedback aptico con accoppiamento audio: generatore aptico

HapticGenerator è un Effetto audio Funzionalità introdotta in Android 12 in grado di generare dati aptici da un canale audio e e riproducilo in tempo reale usando la funzione di feedback aptico con accoppiamento audio. L'effetto viene applicato a AudioTrack come descritto nella Figura 9.

Architettura del generatore aptico

Figura 9. Architettura del generatore aptico

Per assicurarti che l'algoritmo del generatore aptico generi feedback aptico di alta qualità, l'algoritmo di generazione sul motore vibrazione del dispositivo regolando parametri che configurano la catena di filtri che applica alle forme d'onda audio. Questa sezione descrive nel dettaglio questi parametri e spiega come ottimizzarli in base alle specifiche del tuo hardware.

  1. Frequenza di risonanza per il filtro passa banda

    La frequenza di risonanza del vibratore è la frequenza con cui un attuatore aptico ha un output massimo. Questo parametro regola l'antirisonatore in modo appiattire la funzione di trasferimento della risposta, in modo da ottenere una larghezza di banda più ampia. Il framework Android collega automaticamente questo valore all'output del Metodo Vibrator HAL IVibrator.getResonantFrequency.

    Il valore predefinito di questo parametro è 150 Hz. Questa opzione può essere modificata codice qui.

  2. Potenza di normalizzazione per busta lenta

    Questo parametro determina l'esponente nella normalizzazione parziale (controllo automatico del guadagno). Il suo valore predefinito è -0.8, il che significa che L'80% della variazione della gamma dinamica viene rimosso da questo passaggio di controllo del guadagno. Può essere modificato nel codice qui.

  3. Fattore Q per il filtro interruzione banda

    Il fattore di qualità della vibrazione (fattore Q) è determinato da due parametri:

    • Zero Q, il fattore di qualità degli zeri nel filtro band-stop che annulla parzialmente la risonanza.

    • Il Polo Q, il fattore di qualità dei poli nel filtro band-stop.

    Il rapporto tra questi due valori limita la soppressione della risonanza per per aumentare le frequenze più basse e ampliare la risposta dell'algoritmo. Ad esempio: i valori predefiniti di 8 per Zero Q e 4 per la generazione di Pole Q un rapporto di 2, limitando la soppressione della risonanza di un fattore di 2 (6 dB). Il framework Android collega entrambi i valori all'output di Vibrator HAL IVibrator.getQFactor.

    Se i valori predefiniti non tengono conto dello smorzamento della forza del motore sul dispositivo, ti consigliamo di modificare entrambi i valori contemporaneamente aumentando o diminuendo entrambi. Il rapporto tra Q zero e Q polo deve essere maggiore di 1. Può essere modificato nel codice qui.

  4. Frequenza di angolo per la distorsione

    La frequenza agli angoli viene applicata da un filtro passa-basso che elimina vibrazione di basso livello e migliora i livelli più alti utilizzando una distorsione cubica. Il valore predefinito è 300 Hz. Può essere modificato nel codice qui.

  5. Guadagno dell'input e soglia del cubo per la distorsione

    Questi parametri vengono utilizzati da un filtro di distorsione non lineare applicato al forma d'onda di input che attenua l'ampiezza dei segnali di frequenza più bassa aumenta quelle con frequenza maggiore.

    • Il valore predefinito del fattore di guadagno dell'input è 0,3.
    • Il valore predefinito della soglia del cubo è 0.1.

    Consigliamo di modificare entrambi i valori insieme. Si trovano nel codice qui

    Per ulteriori informazioni sulla funzione applicata da questo filtro, consulta le implementazione disponibile qui. Per saperne di più su come questi due parametri influenzano l'output, consigliamo di tracciare le risposte in frequenza dei filtri e di osservare come le risposte in frequenza cambiano con diversi valori parametro.

  6. Guadagno di output per la distorsione

    Questo parametro controlla l'ampiezza finale della vibrazione. È un guadagno finale applicata dopo un limitatore soft che limita le ampiezze della vibrazione a meno di 1. Il suo valore predefinito è 1.5 e può essere modificato nel codice qui. Se la vibrazione è troppo sottile, aumenta il valore. Se riesci a sentire il rumore dell'hardware dell'attuatore, riduci il valore.