Android Haptik API-Referenz

In diesem Abschnitt werden die verschiedenen in Android verfügbaren Haptik-APIs vorgestellt. Außerdem erfahren Sie, wann und wie Sie prüfen können, ob Geräte unterstützt werden, damit Ihre haptischen Effekte wie gewünscht funktionieren.

Es gibt verschiedene Möglichkeiten, haptische Effekte zu erzeugen. Bei der Auswahl müssen Sie die Designprinzipien für die Android-Haptik berücksichtigen. In der folgenden Tabelle sind diese übergeordneten Attribute für jeden Ansatz zusammengefasst:

  • Die Verfügbarkeit ist besonders wichtig bei der Planung von Verhaltens-Fallbacks und muss mit der Prüfung der individuellen Geräteunterstützung kombiniert werden.
  • Klare Haptik sorgt für ein klares und klares Gefühl, das für Nutzer weniger erschrocken ist.
  • Starke Haptik ist ausdrucksstark und erfordert oft eine Hardware mit mehr Funktionen.
API-Oberfläche Verfügbarkeit Klare Haptik Starke Haptik
HapticFeedbackConstants Android 1.5 und höher
(pro Konstante)
Vordefinierter VibrationEffect Android 10 oder höher
Vibrationseffekt-Zusammensetzung Android 11 oder höher (pro Konstante)
Ein/Aus, One-Shot und Wellenformvibration Android 1

Außerdem können Sie mit den auf dieser Seite beschriebenen Benachrichtigungs-APIs die haptischen Effekte für eingehende Benachrichtigungen anpassen.

Auf dieser Seite werden außerdem weitere Konzepte beschrieben, die sich über die API-Oberflächen erstrecken:

  • Hat das Gerät eine Vibration?
  • Die Amplitudensteuerung ermöglicht flüssigere, intensivere haptische Effekte, wird jedoch nicht von allen Geräten unterstützt.
  • Mit VibrationAttributes() können Sie die Vibration basierend auf ihrer Nutzung klassifizieren. So werden die entsprechenden Nutzereinstellungen angewendet und der Nutzer wird nicht unerwartet überrascht.

HapticFeedbackConstants

Die Klasse HapticFeedbackConstants bietet aktionsbasierte Konstanten, mit denen Apps haptisches Feedback hinzufügen können, das auf dem gesamten Gerät einheitlich ist, anstatt dass jede App unterschiedliche Auswirkungen auf häufige Aktionen hat.

Kompatibilität und Anforderungen

Die Verwendung der Methode View.performHapticFeedback mit diesen Konstanten erfordert keine speziellen Berechtigungen für die App. Sie unterliegt der Property View.hapticFeedbackEnabled. Wenn diese auf false gesetzt ist, werden alle haptischen Feedbackaufrufe in der Ansicht deaktiviert, einschließlich Standardaufrufen. Mit der primären Einstellung der Property View.hapticFeedbackEnabled werden alle haptischen Feedbackaufrufe für die Ansicht auf false deaktiviert, einschließlich der Standardaufrufe. Bei der Methode wird auch die Systemeinstellung des Nutzers zur Aktivierung von Touch-Feedback berücksichtigt.

Der einzige Aspekt der Kompatibilität ist die SDK-Ebene der jeweiligen Konstante für die Aktion.

Bei der Verwendung von HapticFeedbackConstants ist kein Fallback-Verhalten erforderlich.

Nutzung von HapticsFeedbackConstants

Weitere Informationen zur Verwendung von HapticFeedbackConstants finden Sie unter Haptisches Feedback zu Ereignissen hinzufügen.

Vordefinierte VibrationEffect

Die Klasse VibrationEffect stellt mehrere vordefinierte Konstanten wie CLICK, TICK und DOUBLE_CLICK bereit. Diese Effekte können für das Gerät optimiert werden.

Kompatibilität und Anforderungen

Zum Abspielen von VibrationEffect ist die Berechtigung VIBRATE im App-Manifest erforderlich.

Bei Verwendung von vordefinierten VibrationEffect ist kein Fallback-Verhalten erforderlich, da Konstanten ohne geräteoptimierte Implementierung auf eine Standardplattform-Fallback-Version zurückgesetzt werden.

Die APIs Vibrator.areEffectsSupported und Vibrator.areAllEffectsSupported bestimmen, ob eine geräteoptimierte Implementierung vorhanden ist. Vordefinierte Effekte können auch ohne eine optimierte Implementierung verwendet werden und nutzen das Standard-Plattform-Fallback. Daher werden diese areEffectsSupported APIs nur benötigt, wenn eine Anwendung prüfen möchte, ob der Effekt für das Gerät optimiert ist oder nicht.

Die Methoden der Wirkungsprüfung können einen von drei Werten zurückgeben:

Da der Wert UNKNOWN darauf hinweist, dass die Prüfungs-API nicht verfügbar ist, wird er normalerweise für alle Auswirkungen oder keine davon zurückgegeben. Diese Geräte nutzen dynamisch das Fallback.

Verwendung der vordefinierten VibrationEffect

Weitere Informationen zur Verwendung eines vordefinierten VibrationEffect finden Sie unter Mit einem vordefinierten VibrationEffect haptisches Feedback generieren.

VibrationEffect – Zusammensetzung

Eine VibrationEffect-Zusammensetzung ist ein Vibrationseffekt, der mit der VibrationEffect.startComposition API erstellt wird. Diese API ermöglicht eine aussagekräftige Haptik, da eine Folge von Primitiven mit benutzerdefinierten Verzögerungen und Intensitäten erstellt wird. Achte aber darauf, dass das Gerät die kombinierten Funktionen unterstützt, um Uneinheitlichkeiten im Allgemeinen zu vermeiden.

Kompatibilität und Anforderungen

Zum Abspielen von VibrationEffect ist die Berechtigung VIBRATE im App-Manifest erforderlich.

Nicht alle Geräte unterstützen alle Funktionen der Composition API und es ist wichtig, dass die Primitive verfügbar sind.

Unterstützung für einfache Vibrationen prüfen

Unterstützung pro Prima kann mit der Methode Vibrator.arePrimitivesSupported abgerufen werden. Alternativ kann eine Reihe von Primitiven mithilfe der Methode Vibrator.areAllPrimitivesSupported gemeinsam überprüft werden. Dies entspricht der Unterstützung von AND-ing der Unterstützung pro Primitiv.

Verwendung von VibrationEffect-Kompositionen

Weitere Informationen zur Verwendung von VibrationEffect-Kombinationen finden Sie unter Vibrationskompositionen erstellen.

Ein/Aus-, One-Shot- und Wellenformvibration

Die älteste unter Android unterstützte Vibrationsform sind einfache Ein-/Aus-Muster mit konfigurierbarer Dauer. Diese APIs sind in der Regel nicht gut auf die Haptik-Designprinzipien abgestimmt, da sie haptisches Feedback erzeugen können. Sie sollten dies nur als letzte Option vermeiden.

Der häufigste Anwendungsfall für Ein/Aus-Vibrationen sind Benachrichtigungen, bei denen, ganz gleich, ob eine Vibration gewünscht ist. Durch Wellenformvibrationen kann sich ein Muster außerdem unbegrenzt wiederholen, wie es bei einem Klingelton der Fall wäre.

Ein One-Shot-Muster bezeichnet das einmalige Vibrieren für N Millisekunden.

Es gibt zwei Arten von Wellenformmustern:

  • Nur Zeitangaben. Diese Art von Wellenform beschreibt die abwechselnde Verweildauer und die Abwesenheitsdauer. Die Zeitmessungen beginnen mit der Auszeit. Daher beginnen Wellenformmuster häufig mit einem Wert von null, um anzuzeigen, dass die Vibration sofort beginnen soll.
  • Zeiten und Amplituden: Diese Art von Wellenform hat ein zusätzliches Array von Amplituden, die mit jeder Zeitangabe übereinstimmen, anstelle der impliziten Ein/Aus-Funktion der ersten Form. Es ist jedoch wichtig zu prüfen, ob das Gerät die Amplitudenkontrolle unterstützt, damit die gewünschte Skalierung erreicht werden kann.

Kompatibilität und Anforderungen

Da Ein/Aus-Vibrationen die älteste Form von Vibrationen sind, werden sie auf praktisch allen Geräten mit Vibration unterstützt, wie weiter unten auf dieser Seite beschrieben.

Für die Wiedergabe von VibrationEffect- oder älteren vibrate-Aufrufen ist die Berechtigung VIBRATE im App-Manifest erforderlich.

Bei Verwendung verschiedener Amplitudenwerte in einer Wellenform wird dringend empfohlen, dass das Gerät die Amplitudensteuerung unterstützt.

Prüfen, ob die Amplitudenregel unterstützt wird

Amplitudenwerte ungleich null werden auf Geräten ohne Amplitudensteuerung auf 100% aufgerundet. Daher ist es wichtig zu prüfen, ob diese Funktion mit Vibrator.hasAmplitudeControl unterstützt wird. Weitere Informationen finden Sie unter Amplitudenregelung.

Sie sollten sorgfältig überlegen, ob Ihr Effekt ohne ausreichende Kontrolle über eine ausreichende Qualität verfügt. Es ist möglicherweise besser, auf eine explizit dafür vorgesehene Ein-/Aus-Vibration zurückzugreifen.

Nutzung von Vibrationen beim Einschalten

In neueren SDK-Ebenen wurden alle Vibrationsmodi in einer einzigen ausdrucksstarken VibrationEffect-Klasse zusammengefasst, in der diese einfachen Vibrationen mit VibrationEffect.createOneshot oder VibrationEffect.createWaveform erzeugt werden.

Benachrichtigungs-APIs

Beim Anpassen Ihrer App-Benachrichtigungen können Sie eine der folgenden APIs verwenden, um mit jedem Benachrichtigungskanal ein Muster zu verknüpfen:

Alle diese Formen nehmen wie zuvor beschrieben ein grundlegendes Ein-Aus-Wellenformmuster an, wobei der erste Eintrag die Verzögerung vor dem Einschalten der Vibration ist.

Allgemeine Konzepte

Für die oben beschriebenen API-Oberflächen gelten verschiedene Konzepte.

Hat das Gerät eine Vibration?

Sie können eine Nicht-Null-Klasse Vibrator von context.getSystemService(Vibrator.class) abrufen. Wenn das Gerät keine Vibration hat, haben Aufrufe der Vibrations-APIs keine Auswirkungen, sodass Apps nicht die gesamte Haptik einer Bedingung steuern müssen. Bei Bedarf kann eine Anwendung jedoch hasVibrator() aufrufen, um festzustellen, ob es sich um eine echte Vibration (true) oder einen Stub (false) handelt.

Hat der Nutzer Touch-Haptik deaktiviert?

Bei einigen benutzerdefinierten Implementierungen muss möglicherweise manuell geprüft werden, ob der Nutzer die Android-Einstellung Touch-Feedback vollständig deaktiviert hat. In diesem Fall sollten Effekte für Touch-Feedback unterdrückt werden. Diese Einstellung kann mit dem Schlüssel HAPTIC_FEEDBACK_ENABLED abgefragt werden, wobei der Wert null deaktiviert ist.

Vibrationsattribute

Vibrationsattribute (derzeit im Format AudioAttributes) können angegeben werden, um dem System den Zweck der Vibration mitzuteilen. Dies ist erforderlich, wenn eine Vibration initiiert wird, während deine App im Hintergrund ausgeführt wird, da für die Nutzung im Hintergrund nur Aufmerksamkeits-Haptik unterstützt wird.

Das Erstellen von AudioAttributes wird in der Klassendokumentation behandelt und sollte als Vibration und nicht als Ton betrachtet werden.

In den meisten Fällen lautet der Inhaltstyp CONTENT_TYPE_SONIFICATION und die Nutzung kann Werte wie USAGE_ASSISTANCE_SONIFICATION für Touch-Feedback im Vordergrund oder USAGE_ALARM für einen Wecker im Hintergrund sein. Audio-Flags haben keine Auswirkungen auf die Vibration.

Amplitudensteuerung

Wenn eine Vibration über eine Amplitudenregel verfügt, kann sie Vibrationen mit unterschiedlicher Intensität abspielen. Dies ist eine wichtige Funktion zur Erstellung von umfassenden Haptik und ermöglicht Nutzern die Kontrolle über die standardmäßigen haptischen Intensitäten.

Die Unterstützung der Amplitudensteuerung kann durch Aufrufen von Vibrator.hasAmplitudeControl geprüft werden. Wenn eine Vibration nicht amplituden unterstützt wird, werden alle Amplitudenwerte auf „aus“/„an“ zugeordnet, je nachdem, ob sie null oder ungleich null sind. Daher sollten Anwendungen, die eine umfassende Haptik mit unterschiedlichen Amplituden verwenden, diese deaktivieren, wenn das Gerät keine Amplitudensteuerung bietet.