Haptisches Feedback zu Terminen hinzufügen

Einer der grundlegendsten Anwendungsfälle für Haptik ist das Geben von Feedback zu Nutzerinteraktionen. Gute Anwendungsfälle für haptisches Feedback sind beispielsweise die Zeitauswahl, der Tastendruck auf einer virtuellen Tastatur und die Textauswahl. Weitere Informationen darüber, wann und wie haptisches Feedback angewendet wird, finden Sie unter Haptik-Designprinzipien.

Auf dieser Seite werden drei Möglichkeiten für haptisches Feedback beschrieben.

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

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

View-Komponenten verwenden, um haptisches Feedback zu generieren

Mit der Methode View.performHapticFeedback können Sie haptisches Feedback generieren. Die durch HapticFeedbackConstants definierten haptischen Konstanten konzentrieren sich auf ihre Funktionalität in einer Anwendung, nicht auf die Art des durchgeführten haptischen Effekts.

Die zugrunde liegende Implementierung kann je nach Gerät und Hardwarefunktion variieren. Die App muss jedoch nur die Art des Feedbacks berücksichtigen, das in einem bestimmten Kontext bereitgestellt wird. Wenn Sie sich auf die Funktionalität konzentrieren, können Sie haptisches Feedback für ähnliche Interaktionen aktivieren. Die Nutzenden lernen im Laufe der Zeit, unterschiedlichen haptischen Empfindungen unterschiedliche Bedeutungen zuzuordnen.

Voraussetzungen: Haptisches Feedback aktivieren

Solange das View sichtbar ist, kann für die zugehörigen Ereignisse haptisches Feedback verwendet werden. Einige Ereignisse, z. B. langes Drücken, haben Standardhaptik, die ausgelöst wird, wenn ein Listener der Ansicht das Ereignis verarbeitet (gibt true zurück).

Ein Android-View kann haptisches Feedback deaktivieren, indem die Eigenschaft View.hapticFeedbackEnabled auf false gesetzt wird. Das Deaktivieren dieses Attributs führt zu einem Standardfeedback.

Die Methode performHapticFeedback berücksichtigt auch die Systemeinstellung HAPTIC_FEEDBACK_ENABLED, mit der der Nutzer sie potenziell für das gesamte System deaktivieren kann.

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

HapticFeedbackConstant auswählen

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

Beispiel 1: Tastendruck

In diesem Beispiel wird gezeigt, wie Sie einer Berührungseingabe in View mithilfe von Touch-Listenern ein haptisches Feedback hinzufügen. Die Effekte simulieren das Gefühl, auf eine Taste zu drücken und sie dann wieder 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. Ein CONFIRM-Effekt wird im Allgemeinen von einer kurzen und leichten Vibration erwartet, während ein REJECT eine stärkere Rückkopplung auf Signalausfälle sein 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);
  }
});

Vordefiniertes VibrationEffect-Objekt verwenden, um haptisches Feedback zu generieren

Beim View-basierten Ansatz liegt der Fokus auf der Nutzerinteraktion. Sie wird aus Gründen der Konsistenz im gesamten System bevorzugt. Sie können aber auch bestimmte vordefinierte VibrationEffect APIs aufrufen, um benutzerdefinierte Effekte für haptisches Feedback zu erhalten.

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

Geräteunterstützung von VibrationEffect APIs

Bei der einfachen Verwendung sollte nicht geprüft werden müssen, ob einzelne VibrationEffect APIs unterstützt werden. Mit APIs wie Vibrator.areEffectsSupported und Vibrator.areAllEffectsSupported wird ermittelt, ob auf dem Gerät eine benutzerdefinierte Implementierung der Konstante vorhanden ist. 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: Vibration und VIBRATE-Berechtigung laden

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 mit diesem Dienst zu vibrieren. Die Berechtigung kann der Manifestdatei der Anwendung hinzugefügt werden:

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

Vordefinierte VibrationEffect wiedergeben

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

In diesem Beispiel wird ein Klickeffekt verwendet.

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 Primitiven verwenden

Die VibrationEffect.Composition API bietet zusätzliche Möglichkeiten für haptisches Feedback. Im Gegensatz zu den Effekten haben diese Primitive jedoch keine Fallbacks auf Systemebene, was bedeutet, dass die Primitive und andere vom Gerät unterstützte Funktionen sorgfältig geprüft werden müssen.

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