Aggiungere feedback aptico agli eventi

Uno dei casi d'uso più basilari della tecnologia aptica è fornire feedback alle interazioni degli utenti. I selettori dell'ora, la pressione dei tasti su una tastiera virtuale e la selezione del testo sono esempi comuni di buoni casi d'uso per il feedback aptico. Per ulteriori informazioni su quando e come applicare la tecnologia aptica, leggi l'articolo sui principi di progettazione della tecnologia aptica.

In questa pagina vengono descritti tre modi per fornire feedback aptico.

Questi metodi utilizzano primitive definite a livello di dispositivo per fornire feedback di alta qualità personalizzati per il dispositivo in uso.

Per impostazione predefinita, tutti i metodi di feedback aptico rispettano le impostazioni relative al feedback al tocco dell'utente.

Usa i componenti View per generare feedback aptico

Utilizza il metodo View.performHapticFeedback per generare feedback aptico. Le costanti aptiche definite da HapticFeedbackConstants sono incentrate sulla loro funzionalità in un'applicazione, non sul tipo di effetto aptico applicato.

L'implementazione di base può variare a seconda delle funzionalità del dispositivo e dell'hardware, ma l'app deve considerare solo il tipo di feedback da fornire in un determinato contesto. Concentrandoti sulla funzionalità, puoi attivare il feedback aptico per interazioni simili. Gli utenti imparano ad associare nel tempo significati diversi alle diverse sensazioni aptiche.

Prerequisiti: attivare il feedback aptico

Finché la View è visibile, il feedback aptico può essere utilizzato per i suoi eventi. Alcuni eventi, ad esempio la pressione prolungata, hanno una tecnologia aptica predefinita che viene attivata se un ascoltatore nella visualizzazione gestisce l'evento (restituisce true).

Un View di Android può disattivare il feedback aptico impostando la proprietà View.hapticFeedbackEnabled su false. La disattivazione di questa proprietà genera un feedback predefinito.

Il metodo performHapticFeedback rispetta anche l'impostazione di sistema HAPTIC_FEEDBACK_ENABLED, che consente all'utente di disattivarle potenzialmente per l'intero sistema.

A differenza di altre API aptiche, l'uso di HapticFeedbackConstants con View non richiede l'autorizzazione VIBRATE.

Scegli un HapticFeedbackConstant

Quando utilizzi i componenti View con HapticFeedbackConstants, non è necessario valutare il supporto dei dispositivi specifici, poiché queste costanti avranno un comportamento di fallback, se necessario. L'unica considerazione è il livello di SDK della costante desiderata.

Esempio 1: pressione dei tasti

Questo è un esempio di come aggiungere un feedback aptico a un input tocco in View utilizzando i listener touch. Gli effetti simulano la sensazione di premere un pulsante e poi rilasciarlo.

Kotlin

class HapticTouchListener : View.OnTouchListener {
  override fun onTouch(View view, MotionEvent event) : Boolean {
    when (event.actionMasked) {
      MotionEvent.ACTION_DOWN ->
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY)
      MotionEvent.ACTION_UP ->
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE)
    }
    return true
  }
}

Java

class HapticTouchListener implements View.OnTouchListener {
  @Override
  public boolean onTouch(View view, MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
        break;
      case MotionEvent.ACTION_UP:
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE);
        break;
    }
    return true;
  }
}

Esempio 2: pulsante Invia

I casi d'uso del feedback aptico vanno oltre la simulazione di un'interazione fisica con il dispositivo. Potrebbero essere usati anche per trasmettere un significato astratto. Ad esempio, l'aspettativa generale di un effetto CONFIRM è una vibrazione breve e leggera, mentre REJECT potrebbe essere un feedback più forte per segnalare un errore. Questo è illustrato nell'esempio di seguito per un feedback sul pulsante Invia.

Kotlin

submitButton.setOnClickListener { view ->
  val successful = performSubmit()
  if (successful) {
    view.performHapticFeedback(HapticFeedbackConstants.CONFIRM)
  } else {
    view.performHapticFeedback(HapticFeedbackConstants.REJECT)
  }
}

Java

submitButton.setOnClickListener(view -> {
  boolean successful = performSubmit();
  if (successful) {
    view.performHapticFeedback(HapticFeedbackConstants.CONFIRM);
  } else {
    view.performHapticFeedback(HapticFeedbackConstants.REJECT);
  }
});

Utilizza un valore predefinito di VibrationEffect per generare feedback aptico

L'approccio basato su View si concentra sull'interazione dell'utente. È preferito per la coerenza all'interno del sistema. Tuttavia, è possibile richiamare specifiche API predefinite di VibrationEffect per ottenere effetti di feedback aptico personalizzati.

Gli effetti predefiniti sono disponibili come costanti VibrationEffect e possono essere controllati e utilizzati con il servizio Vibrator come mostrato negli esempi seguenti.

Informazioni sul supporto delle API VibrationEffect sui dispositivi

Nell'utilizzo di base, non dovrebbe essere necessario verificare il supporto delle singole API VibrationEffect. API come Vibrator.areEffectsSupported e Vibrator.areAllEffectsSupported vengono utilizzate per determinare se il dispositivo ha un'implementazione personalizzata della costante. Se non è presente un effetto personalizzato, la tua app può comunque riprodurli e utilizzare un'implementazione di riserva definita dalla piattaforma.

Per maggiori dettagli, vedi PredefinitoVibrationEffect.

Prerequisiti: carica il vibratore e l'autorizzazione VIBRATE

La maggior parte delle vibrazioni può essere utilizzata con il servizio Vibrator, che può essere caricato come segue:

Kotlin

import android.os.Vibrator

val vibrator = context.getSystemService(Vibrator::class.java)

Java

import android.os.Vibrator;

Vibrator vibrator = context.getSystemService(Vibrator.class);

L'app deve disporre dell'autorizzazione VIBRATE per far vibrare il dispositivo utilizzando questo servizio. È possibile aggiungere l'autorizzazione al file manifest dell'applicazione:

<uses-permission android:name="android.permission.VIBRATE"/>

Riproduci un VibrationEffect predefinito

Gli effetti predefiniti possono essere preparati usando VibrationEffect.createPredefined e poi riprodotti utilizzando uno dei metodi vibrate su Vibrator.

Questo esempio riproduce un effetto Clic.

Kotlin

val vibrator = context.getSystemService(Vibrator::class.java)
...
// Requires VIBRATE permission
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))

Java

Vibrator vibrator = context.getSystemService(Vibrator.class);
...
// Requires VIBRATE permission
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));

Utilizzare composizioni avanzate con le primitive

L'API VibrationEffect.Composition offre ulteriori possibilità per il feedback aptico. Tuttavia, a differenza degli effetti, queste primitive non hanno fallback a livello di sistema, il che significa che è necessario prestare un'attenzione particolare alle primitive e ad altre funzionalità supportate dal dispositivo.

L'utilizzo di queste API viene discusso in maggiore dettaglio nella sezione Creazione di effetti aptici personalizzati.