Haptisches Feedback zu Terminen hinzufügen

Einer der grundlegendsten Anwendungsfälle für Haptik ist die Bereitstellung von Feedback zu Nutzerinteraktionen. Zeitauswahl, Tastenanschlag auf einer virtuellen Tastatur und Textauswahl sind gängige Beispiele für gute Anwendungsfälle für haptisches Feedback. Weitere Informationen dazu, wann und wie Sie Haptik anwenden sollten, finden Sie unter Designprinzipien für Haptik.

Auf dieser Seite werden drei Möglichkeiten beschrieben, wie Sie haptisches Feedback geben können.

Bei diesen Methoden werden auf Geräteebene definierte Primitive verwendet, um hochwertiges Feedback zu liefern, das auf das jeweilige Gerät zugeschnitten ist.

Bei allen Methoden für haptisches Feedback werden standardmäßig die Touch-Feedback-Einstellungen des Nutzers berücksichtigt.

View-Komponenten zum Generieren von haptischem Feedback verwenden

Verwenden Sie die Methode View.performHapticFeedback, um haptisches Feedback zu generieren. Die von HapticFeedbackConstants definierten haptischen Konstanten konzentrieren sich auf ihre Funktionalität in einer Anwendung, nicht auf die Art des ausgeführten haptischen Effekts.

Die zugrunde liegende Implementierung kann je nach Geräte- und Hardwarefunktionen variieren. Die App muss jedoch nur die Art des Feedbacks berücksichtigen, das in einem bestimmten Kontext gegeben werden soll. Wenn Sie sich auf die Funktionalität konzentrieren, können Sie haptisches Feedback für ähnliche Interaktionen aktivieren. Nutzer lernen mit der Zeit, verschiedenen haptischen Empfindungen unterschiedliche Bedeutungen zuzuordnen.

Voraussetzung: Haptisches Feedback aktivieren

Solange das Symbol View sichtbar ist, kann für die zugehörigen Ereignisse haptisches Feedback verwendet werden. Für einige Ereignisse wie das lange Drücken gibt es standardmäßige haptische Rückmeldungen, die ausgelöst werden, wenn ein Listener in der Ansicht das Ereignis verarbeitet (true zurückgibt).

Ein Android-View kann die haptische Rückmeldung deaktivieren, indem er das Attribut View.hapticFeedbackEnabled auf false festlegt. Wenn Sie diese Eigenschaft deaktivieren, wird standardmäßiges Feedback angezeigt.

Bei der Methode performHapticFeedback wird auch die Systemeinstellung HAPTIC_FEEDBACK_ENABLED berücksichtigt, mit der der Nutzer sie möglicherweise für das gesamte System deaktivieren kann.

Im Gegensatz zu anderen haptischen APIs ist für die Verwendung von HapticFeedbackConstants mit einer View keine VIBRATE-Berechtigung erforderlich.

HapticFeedbackConstant auswählen

Wenn Sie View-Komponenten mit HapticFeedbackConstants verwenden, müssen Sie die Geräteunterstützung nicht bewerten, da diese Konstanten bei Bedarf ein Fallback-Verhalten haben. Die einzige Überlegung ist die SDK-Ebene der gewünschten Konstante.

Beispiel 1: Tastenanschlag

In diesem Beispiel wird gezeigt, wie Sie einer Touch-Eingabe in View mithilfe von Touch-Listenern haptisches Feedback hinzufügen. Die Effekte simulieren das Gefühl, eine Taste gedrückt zu halten und dann loszulassen.

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

Beispiel 2: Schaltfläche „Senden“

Anwendungsfälle für haptisches Feedback gehen über die Simulation einer physischen Interaktion mit dem Gerät hinaus. Sie können auch verwendet werden, um eine abstrakte Bedeutung zu vermitteln. Beispielsweise wird für einen CONFIRM-Effekt in der Regel eine kurze und leichte Vibration erwartet, während ein REJECT-Effekt ein stärkeres Feedback für einen Fehler signalisieren könnte. Das wird im folgenden Beispiel für Feedback zur Schaltfläche „Senden“ veranschaulicht.

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

Vordefinierte VibrationEffect zum Generieren von haptischem Feedback verwenden

Beim View-basierten Ansatz liegt der Fokus auf der Nutzerinteraktion. Sie wird bevorzugt, um für Konsistenz im gesamten System zu sorgen. Bestimmte vordefinierte VibrationEffect APIs können jedoch auch für benutzerdefinierte haptische Feedbackeffekte aufgerufen werden.

Vordefinierte Effekte sind als VibrationEffect-Konstanten verfügbar. Sie können wie in den folgenden Beispielen gezeigt mit dem Dienst Vibrator auf Unterstützung geprüft und wiedergegeben werden.

Geräteunterstützung von VibrationEffect APIs

Bei der grundlegenden Nutzung sollte es nicht erforderlich sein, die Unterstützung einzelner VibrationEffect APIs zu prüfen. Mithilfe von APIs wie Vibrator.areEffectsSupported und Vibrator.areAllEffectsSupported wird ermittelt, ob das Gerät eine benutzerdefinierte Implementierung der Konstante hat. Wenn kein benutzerdefinierter Effekt vorhanden ist, kann Ihre App die Effekte trotzdem abspielen und eine plattformdefinierte Fallback-Implementierung verwenden.

Weitere Informationen finden Sie unter Vordefinierte VibrationEffect.

Voraussetzungen: Laden Sie den Vibrator und die Berechtigung VIBRATE.

Die meisten Vibrationen können mit dem Dienst Vibrator abgespielt werden, der so geladen werden kann:

Kotlin

import android.os.Vibrator

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

Java

import android.os.Vibrator;

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

Die App benötigt die Berechtigung VIBRATE, um das Gerät mithilfe dieses Dienstes zum Vibrieren zu bringen. Die Berechtigung kann der Manifestdatei der Anwendung hinzugefügt werden:

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

Vordefinierte VibrationEffect abspielen

Vordefinierte Effekte können mit VibrationEffect.createPredefined erstellt und dann mit einer der vibrate-Methoden auf Vibrator wiedergegeben werden.

In diesem Beispiel wird ein Klickeffekt wiedergegeben.

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

Erweiterte Kompositionen mit Primitivelementen verwenden

Die VibrationEffect.Composition API bietet zusätzliche Möglichkeiten für haptisches Feedback. Im Gegensatz zu Effekten gibt es für diese Primitiven jedoch keine Fallbacks auf Systemebene. Das bedeutet, dass Sie die Primitiven und anderen vom Gerät unterstützten Funktionen sorgfältig prüfen müssen.

Die Verwendung dieser APIs wird unter Benutzerdefinierte haptische Effekte erstellen ausführlicher erläutert.