Riferimento API Android aptics

Questa sezione offre un'introduzione alle varie API della tecnologia aptica disponibili in Android. Descrive inoltre quando e come verificare la presenza del supporto dispositivo necessario per garantire che gli effetti aptici vengano riprodotti come previsto.

Esistono diversi modi per creare effetti aptici ed è importante considerare i principi di progettazione della tecnologia aptica Android nella scelta. La seguente tabella riassume questi attributi di alto livello di ciascun approccio:

  • La disponibilità è particolarmente importante quando si pianifica il comportamento di riserva e deve essere combinata con il controllo dell'assistenza dei singoli dispositivi.
  • Una trasmissione aptica chiara sono sensazioni chiare e nitide, meno sconvolgenti per gli utenti.
  • Una tecnologia aptica avanzata ha una maggiore espressività e spesso richiede hardware più ricco di funzionalità.
piattaforma API Disponibilità Cancella feedback aptico Tecnologia aptica avanzata
Costanti feedback aptici Android 1.5 e versioni successive
(per costante)
Effetto vibrazione predefinito Android 10 e versioni successive
Composizione effetto vibrazione Android 11 e versioni successive (per costante)
Vibrazioni on/off, one-shot e a forma d'onda Android 1

Inoltre, le API di notifica, descritte in questa pagina, consentono di personalizzare gli effetti aptici riprodotti per le notifiche in arrivo.

In questa pagina vengono inoltre descritti alcuni concetti aggiuntivi che coprono le piattaforme API:

HapticFeedbackConstants

La classe HapticFeedbackConstants fornisce costanti basate su azioni per consentire alle app di aggiungere un feedback aptico coerente in tutta l'esperienza del dispositivo, invece di ogni app avere effetti diversi per le azioni comuni.

Compatibilità e requisiti

L'utilizzo del metodo View.performHapticFeedback con queste costanti non richiede autorizzazioni speciali per l'app. È soggetta alla proprietà View.hapticFeedbackEnabled, che se impostata su false disattiverà tutte le chiamate a feedback aptico nella vista, incluse quelle predefinite.L'impostazione relativa alla proprietà View.hapticFeedbackEnabled principale, che se impostata su false disattiverà tutte le chiamate a feedback aptico nella vista, incluse quelle predefinite. Il metodo rispetta inoltre l'impostazione di sistema dell'utente per l'attivazione del feedback al tocco.

L'unica considerazione di compatibilità è il livello di SDK della costante specifica per l'azione.

Non è necessario fornire un comportamento di fallback quando utilizzi HapticFeedbackConstants.

Utilizzo di HapticsFeedbackConstants

Per maggiori dettagli sull'utilizzo di HapticFeedbackConstants, consulta Aggiungere feedback aptico agli eventi.

Predefinito: VibrationEffect

La classe VibrationEffect fornisce diverse costanti predefinite come CLICK, TICK e DOUBLE_CLICK. Questi effetti potrebbero essere ottimizzati per il dispositivo.

Compatibilità e requisiti

Per riprodurre qualsiasi VibrationEffect è necessaria l'autorizzazione VIBRATE nel file manifest dell'app.

Non è necessario fornire un comportamento di fallback quando utilizzi VibrationEffect predefinito, poiché le costanti che non hanno un'implementazione ottimizzata per dispositivo ripristinano una piattaforma di riserva standard.

Le API Vibrator.areEffectsSupported e Vibrator.areAllEffectsSupported consentono di determinare se esiste un'implementazione ottimizzata per dispositivo. Gli effetti predefiniti possono comunque essere utilizzati senza un'implementazione ottimizzata e utilizzano il fallback della piattaforma standard. Di conseguenza, queste API areEffectsSupported sono necessarie solo se un'applicazione vuole prendere in considerazione l'ottimizzazione dell'effetto per il dispositivo.

I metodi di controllo degli effetti possono restituire uno dei tre valori seguenti:

Poiché il valore UNKNOWN indica che l'API di controllo non è disponibile, in genere viene restituita per tutti gli effetti o per nessuno. Questi dispositivi tornano indietro in modo dinamico.

Utilizzo del valore predefinito di VibrationEffect

Per maggiori dettagli sull'utilizzo di un VibrationEffect predefinito, consulta l'articolo Utilizzare un VibrationEffect predefinito per generare feedback aptico.

VibrationEffect composizione

Una composizione VibrationEffect è un effetto di vibrazione creato utilizzando l'API VibrationEffect.startComposition. Questa API consente una nota aptica avanzata espressiva creando una sequenza di primitive con ritardi e intensità personalizzati. Tuttavia, assicurati che il dispositivo supporti le funzionalità combinate per evitare un'esperienza complessiva incoerente.

Compatibilità e requisiti

Per riprodurre qualsiasi VibrationEffect è necessaria l'autorizzazione VIBRATE nel file manifest dell'app.

Non tutti i dispositivi supportano tutte le funzionalità dell'API di composizione ed è importante verificare che le primitive siano disponibili.

Verifica il supporto della modalità di vibrazione primitiva

Il supporto per primitiva può essere recuperato utilizzando il metodo Vibrator.arePrimitivesSupported. In alternativa, un insieme di primitive può essere verificato insieme utilizzando il metodo Vibrator.areAllPrimitivesSupported. Ciò equivale al supporto per ANDdelle primitive.

Utilizzo di VibrationEffect composizioni

Per maggiori dettagli sull'utilizzo delle composizioni VibrationEffect, consulta Creare composizioni con vibrazione.

Vibrazioni on-off, one-shot e a forma d'onda

La forma meno recente di vibrazione supportata su Android è costituita dai semplici pattern di attivazione/disattivazione della vibrazione con durate configurabili. Queste API in genere non sono ben allineate con i principi di progettazione della tecnologia aptica perché possono generare una tecnologia aptica intermittente; evitale se non come ultima alternativa.

Il caso d'uso più comune per le vibrazioni on-off sono le notifiche, dove è preferibile una vibrazione. Le vibrazioni a forma d'onda consentono inoltre in modo univoco che un pattern si ripeta all'infinito, come puoi immaginare per una suoneria.

Un pattern one-shot fa riferimento alla vibrazione una volta per N millisecondi.

Esistono due tipi di pattern di forma d'onda:

  • Solo tempi. Questo tipo di forma d'onda descrive le durate alternate non attive e le durate alternate. I tempi iniziano con la durata disattivata. Di conseguenza, i pattern di forma d'onda spesso iniziano con un valore zero per indicare l'inizio immediato della vibrazione.
  • Tempi e ampiezze. Questo tipo di forma d'onda ha un array aggiuntivo di ampiezze da abbinare a ogni cifra di tempo, piuttosto che l'attivazione/disattivazione implicita della prima forma. Tuttavia, è importante verificare che il dispositivo supporti il controllo dell'ampiezza per garantire che sia possibile ottenere la scalabilità prevista.

Compatibilità e requisiti

Poiché le vibrazioni on-off sono la forma meno recente di vibrazione, sono supportate praticamente su tutti i dispositivi con vibrazione, come descritto più avanti in questa pagina.

La riproduzione di qualsiasi chiamata a VibrationEffect o a vibrate in stile precedente richiede l'autorizzazione VIBRATE nel file manifest dell'app.

Se utilizzi valori di ampiezza diversi in una forma d'onda, consigliamo vivamente di far sì che il dispositivo supporti il controllo dell'ampiezza.

Verificare il supporto del controllo dell'ampiezza

I valori di ampiezza diversi da zero vengono arrotondati al 100% sui dispositivi senza controllo dell'ampiezza, quindi è importante verificare se il supporto è presente utilizzando Vibrator.hasAmplitudeControl. Per ulteriori dettagli, vedi il controllo dell'ampiezza.

Valuta attentamente se l'effetto ha una qualità sufficiente senza controllo dell'ampiezza. Potrebbe essere preferibile utilizzare una vibrazione di attivazione/disattivazione progettata appositamente.

Utilizzo di vibrazioni on-off

Nei livelli SDK più recenti, tutte le modalità di vibrazione sono state consolidate in un'unica classe VibrationEffect espressiva, in cui queste semplici vibrazioni vengono create utilizzando VibrationEffect.createOneshot o VibrationEffect.createWaveform.

API di notifica

Quando personalizzi le notifiche dell'app, puoi utilizzare una delle seguenti API per associare un pattern a ciascun canale di notifica:

Tutti questi moduli assumono un pattern di forma d'onda on-off di base, come descritto in precedenza, in cui la prima voce è il ritardo prima dell'accensione del vibratore.

Concetti generali

Vari concetti si applicano alle piattaforme API descritte in precedenza.

Il dispositivo è dotato di una vibrazione?

Puoi ottenere una classe Vibrator con valore non null da context.getSystemService(Vibrator.class). Se il dispositivo non dispone di vibratore, le chiamate alle API di vibrazione non hanno alcun effetto, quindi le app non devono limitare tutta la loro tecnologia aptica in una determinata condizione. Tuttavia, se necessario, un'applicazione può chiamare hasVibrator() per determinare se si tratta di una vibrazione reale (true) o uno stub (false).

L'utente ha disattivato la tecnologia aptica tattile?

Alcune implementazioni personalizzate potrebbero richiedere il controllo manuale se l'utente ha disattivato completamente l'impostazione Feedback al tocco di Android, nel qual caso gli effetti del feedback al tocco dovrebbero essere soppressi. È possibile eseguire query su questa impostazione utilizzando la chiave HAPTIC_FEEDBACK_ENABLED, dove un valore pari a zero significa che è disabilitato.

Attributi della vibrazione

Puoi fornire gli attributi della vibrazione (attualmente sotto forma di AudioAttributes) per aiutare il sistema a comprendere lo scopo della vibrazione. Questa operazione è obbligatoria quando viene avviata una vibrazione quando l'app è in background, poiché solo la tecnologia aptica di attenzione è supportata per l'utilizzo in background.

La creazione di AudioAttributes è trattata nella documentazione del corso e deve essere considerata come una vibrazione anziché come un suono.

Come guida, nella maggior parte dei casi, il tipo di contenuti è CONTENT_TYPE_SONIFICATION e l'utilizzo potrebbe essere rappresentato da valori come USAGE_ASSISTANCE_SONIFICATION per il feedback al tocco in primo piano o USAGE_ALARM per una sveglia in background. I segnali audio non hanno effetto sulle vibrazioni.

Controllo dell'ampiezza

Se una vibrazione ha il controllo dell'ampiezza, può riprodurre vibrazioni con intensità diverse. Questa è una funzionalità importante per produrre una tecnologia aptica avanzata, nonché per consentire potenzialmente all'utente di controllare l'intensità della tecnologia aptica predefinita.

Il supporto per il controllo dell'ampiezza può essere verificato chiamando il Vibrator.hasAmplitudeControl. Se una vibrazione non supporta l'ampiezza, tutti i valori di ampiezza verranno mappati su off/on in base al valore zero o diverso da zero. Di conseguenza, le applicazioni che utilizzano una tecnologia aptica avanzata con ampiezze diverse dovrebbero valutare la possibilità di disattivarle se il dispositivo non dispone del controllo dell'ampiezza.