Aggiungere feedback aptico agli eventi

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

Questa pagina descrive tre modi per fornire feedback aptico.

Questi metodi utilizzano primitive definite a livello di dispositivo per fornire un feedback di alta qualità adattato al dispositivo in uso.

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

Utilizza i componenti View per generare feedback aptico

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

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

Prerequisiti: attiva il feedback aptico

Finché il View è visibile, il feedback aptico può essere utilizzato per i relativi eventi. Alcuni eventi, come il tocco prolungato, hanno un feedback aptico predefinito che viene attivato se un listener nella visualizzazione gestisce l'evento (restituisce true).

Un View Android può disattivare il feedback aptico impostando la proprietà View.hapticFeedbackEnabled su false. Se disattivi questa proprietà, viene visualizzato il feedback predefinito.

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

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

Scegli un HapticFeedbackConstant

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

Esempio 1: pressione di un tasto

Questo è un esempio di come aggiungere un feedback aptico a un input tocco in View utilizzando i listener di tocco. 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. Possono anche essere usati per trasmettere un significato astratto. Ad esempio, l'aspettativa generale per un effetto di CONFIRM è una vibrazione breve e leggera, mentre un REJECT potrebbe essere un feedback più forte per segnalare un errore. Ciò è illustrato nel seguente esempio per un feedback del pulsante di invio.

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);
  }
});

Utilizzare un VibrationEffect predefinito per generare feedback aptico

L'utilizzo dell'approccio basato su View si concentra sull'interazione dell'utente, quindi preferiscilo per garantire la coerenza in tutto il sistema. Tuttavia, puoi anche richiamare API VibrationEffect specifiche predefinite per effetti di feedback aptico personalizzati.

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

Informazioni sul supporto dei dispositivi delle API VibrationEffect

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

Per maggiori dettagli, vedi VibrationEffect predefinito.

Prerequisiti: carica la vibrazione e l'autorizzazione VIBRATE

La maggior parte delle vibrazioni può essere riprodotta con il servizio Vibrator, che può essere caricato nel seguente modo:

Kotlin

import android.os.Vibrator

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

Java

import android.os.Vibrator;

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

La tua app deve disporre dell'autorizzazione VIBRATE per far vibrare il dispositivo utilizzando questo servizio. Puoi aggiungere questa autorizzazione al file manifest dell'applicazione:

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

Riproduci un VibrationEffect predefinito

Gli effetti predefiniti possono essere preparati utilizzando VibrationEffect.createPredefined, quindi riprodotti utilizzando uno dei metodi vibrate su Vibrator.

Questo esempio riproduce un effetto di 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 VibrationEffect.Builder per creare composizioni

A partire da Android 16 (quarto trimestre 2026), l'API VibrationEffect.Builder offre il modo più flessibile ed espressivo per creare un feedback aptico personalizzato sequenziando preset discreti, inviluppi e altri elementi di vibrazione lungo una sequenza temporale. Inoltre, le composizioni create con VibrationEffect.Builder hanno supporto di fallback automatico integrato per gli elementi supportati.

La composizione di effetti aptici con VibrationEffect.Builder (e l'API VibrationEffect.Composition) è descritta in modo più dettagliato in Creazione di effetti aptici personalizzati.