Android Haptik API-Referenz

In diesem Abschnitt erhalten Sie eine Einführung in die verschiedenen Haptik-APIs, die in Android verfügbar sind. Außerdem erfahren Sie, wann und wie Sie prüfen können, ob die Geräte die haptischen Effekte unterstützen, damit sie wie gewünscht abgespielt werden.

Es gibt verschiedene Möglichkeiten, haptische Effekte zu erstellen. Bei der Auswahl sollten Sie die Designprinzipien für Haptik von Android berücksichtigen. In der folgenden Tabelle sind diese allgemeinen Attribute der einzelnen Ansätze zusammengefasst:

  • Die Verfügbarkeit ist besonders wichtig bei der Planung des Verhaltens bei Ausfall und muss mit der Prüfung der Unterstützung einzelner Geräte kombiniert werden.
  • Klare Haptik sind klare und saubere Empfindungen, die für Nutzer weniger irritierend sind.
  • Ausdrucksstarke Haptik ist ausdrucksvoller und erfordert oft eine leistungsstärkere Hardware.
API-Oberfläche Verfügbarkeit Haptik löschen Ausgefeilte Haptik
HapticFeedbackConstants Android 1.5 und höher
(pro Konstante)
Vordefinierter Vibrationseffekt Android 10 oder höher
VibrationEffect-Zusammensetzung Android 11 und höher (je nach Konstante)
Ein/Aus, einmalige Vibration und Wellenform Android 1

Außerdem können Sie mit den auf dieser Seite beschriebenen Benachrichtigungs-APIs die haptischen Effekte anpassen, die bei eingehenden Benachrichtigungen abgespielt werden.

Auf dieser Seite werden auch weitere Konzepte beschrieben, die für alle API-Oberflächen gelten:

  • Hat das Gerät einen Vibrator?
  • Die Amplitudensteuerung ermöglicht weichere, ausdrucksstärkere haptische Effekte, wird aber nicht von allen Geräten unterstützt.
  • Mit VibrationAttributes() können Sie Vibrationen basierend auf ihrer Verwendung klassifizieren, sodass die entsprechenden Nutzereinstellungen angewendet werden und der Nutzer nicht überrascht wird.

HapticFeedbackConstants

Die Klasse HapticFeedbackConstants bietet aktionsbasierte Konstanten, mit denen Apps haptisches Feedback hinzufügen können, das auf allen Geräten einheitlich ist, anstatt dass jede App unterschiedliche Effekte für gängige Aktionen hat.

Kompatibilität und Anforderungen

Für die Verwendung der Methode View.performHapticFeedback mit diesen Konstanten sind keine speziellen Berechtigungen für die App erforderlich. Sie unterliegt der Eigenschaft View.hapticFeedbackEnabled.Wenn diese auf false festgelegt ist, werden alle Aufrufe für haptisches Feedback in der Ansicht deaktiviert, einschließlich der Standardaufrufe.View.hapticFeedbackEnabledfalse Die Methode berücksichtigt auch die Systemeinstellung des Nutzers zum Aktivieren von Touchfeedback.

Die einzige Kompatibilitätsüberlegung ist die SDK-Ebene der jeweiligen Konstante für die Aktion.

Bei Verwendung von HapticFeedbackConstants ist kein Fallback-Verhalten erforderlich.

Nutzung von HapticsFeedbackConstants

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

Vordefiniert VibrationEffect

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

Kompatibilität und Anforderungen

Für die Wiedergabe von VibrationEffect ist die Berechtigung VIBRATE im App-Manifest erforderlich.

Bei der Verwendung vordefinierter VibrationEffect ist kein Fallback-Verhalten erforderlich, da Konstanten ohne eine für das Gerät optimierte Implementierung auf einen Standard-Plattform-Fallback zurückgreifen.

Mit den APIs Vibrator.areEffectsSupported und Vibrator.areAllEffectsSupported lässt sich feststellen, ob eine geräteoptimierte Implementierung vorhanden ist. Vordefinierte Effekte können weiterhin ohne optimierte Implementierung verwendet werden. Dabei wird der Standard-Plattform-Fallback verwendet. Daher sind diese areEffectsSupported APIs nur erforderlich, wenn in einer Anwendung berücksichtigt werden soll, ob der Effekt für das Gerät optimiert ist oder nicht.

Die Methoden zur Wirkungsüberprüfung können einen der drei Werte zurückgeben:

Da der Wert „UNKNOWN“ angibt, dass die API zur Überprüfung nicht verfügbar ist, wird er in der Regel für alle oder keine Effekte zurückgegeben. Bei diesen Geräten erfolgt ein dynamischer Rückfall.

Verwendung vordefinierter VibrationEffect

Weitere Informationen zur Verwendung einer vordefinierten VibrationEffect finden Sie unter Vordefinierte VibrationEffect zum Generieren von haptischem Feedback verwenden.

Envelope VibrationEffect

Mit envelopebasierten Vibrationen können Sie die Amplitude und Frequenz der Vibrationen im Zeitverlauf präzise steuern, indem Sie eine Abfolge von Steuerpunkten definieren. So können Entwickler ein umfassenderes und nuancierteres haptisches Feedback entwickeln. Diese Vibrationen können mit den Klassen BasicEnvelopeBuilder und WaveformEnvelopeBuilder erstellt werden.

Kompatibilität und Anforderungen

Wenn Ihre App Vibrationseffekte abspielen soll, muss sie die Berechtigung VIBRATE im App-Manifest deklarieren.

Rufe Vibrator.areEnvelopeEffectsSupported() auf, um zu prüfen, ob die Unterstützung für Hüllkurveneffekte verfügbar ist.

Einfacher Umschlag-Builder

Für eine reibungslose und nahtlose haptische Erfahrung müssen Envelope-Effekte mit einer Intensität von \( 0.0 \)beginnen und enden. Die API erzwingt dies, indem die Startintensität auf null festgelegt wird und eine Ausnahme auftritt, wenn die Endintensität nicht null ist. Diese Einschränkung verhindert unerwünschte dynamische Effekte bei den Vibrationen aufgrund von Diskontinuitäten in der Amplitude, die sich negativ auf die haptische Wahrnehmung des Nutzers auswirken können.

Für ein einheitliches Envelope-Effekt-Rendering auf allen Geräten müssen Geräte, die diese Funktion unterstützen, eine Mindestdauer von 10 ms zwischen den Steuerpunkten und mindestens 16 Punkte für Envelope-Effekte verarbeiten können.

Waveform Envelope Builder

Das Framework ändert die vom Entwickler angeforderten Werte für Häufigkeit und Amplitude nicht. Die API legt jedoch auch die Startamplitude auf null fest, um reibungslose Übergänge zu ermöglichen.

Damit Sie die Wellenform-Envelope-Effekte Ihrer App optimieren und für geräteübergreifende Kompatibilität sorgen können, bietet Android APIs zum Abfragen wichtiger Gerätefunktionen. Diese Methoden liefern Informationen zu den Einschränkungen des Geräts, z. B. die maximale und minimale Übergangsdauer zwischen Steuerpunkten und die maximale Anzahl von Steuerpunkten, die für einen einzelnen Effekt unterstützt werden:

getMaxSize()
Die maximale Anzahl von Steuerpunkten, die für einen Envelope-Effekt unterstützt werden.
getMinControlPointDurationMillis()
Die Mindestdauer in Millisekunden zwischen zwei Kontrollpunkten innerhalb eines Envelope-Effekts.
getMaxControlPointDurationMillis()
Die maximale unterstützte Dauer in Millisekunden zwischen zwei Steuerpunkten innerhalb eines Envelope-Effekts.
getMaxDurationMillis()
Die maximale Dauer, die für einen Envelope-Effekt unterstützt wird, in Millisekunden.

Wenn ein Effekt die Einschränkungen des Geräts überschreitet, z. B. zu viele Steuerpunkte oder eine Dauer, die über das Maximum hinausgeht, passt das Framework den Effekt automatisch so an, dass er innerhalb der zulässigen Grenzen liegt. Bei diesem Anpassungsprozess wird versucht, die ursprüngliche Absicht und das ursprüngliche Erscheinungsbild des Designs so weit wie möglich beizubehalten.

Verwendung von Envelope-Vibrationseffekten

Weitere Informationen zum Erstellen von Umschlagwellenformeffekten findest du unter Vibrationswellenform mit Umschlägen erstellen.

VibrationEffect Komposition

Eine VibrationEffect-Komposition ist ein Vibrationseffekt, der mit der VibrationEffect.startComposition API erstellt wurde. Diese API ermöglicht ausdrucksstarke Haptik, indem eine Sequenz von Primitiven mit benutzerdefinierten Verzögerungen und Intensitäten erstellt wird. Achten Sie jedoch darauf, dass das Gerät die kombinierten Funktionen unterstützt, um Inkonsistenzen zu vermeiden.

Kompatibilität und Anforderungen

Für die Wiedergabe von VibrationEffect ist die Berechtigung VIBRATE im App-Manifest erforderlich.

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

Unterstützung für Vibrationsprimitive prüfen

Unterstützung pro Primitive kann mit der Methode Vibrator.arePrimitivesSupported abgerufen werden. Alternativ können Sie mit der Methode Vibrator.areAllPrimitivesSupported mehrere Primitive gleichzeitig prüfen. Das entspricht dem AND-en der Unterstützung pro Primitive.

Verwendung von VibrationEffect-Kompositionen

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

Ein-/Aus-, One-Shot- und Wellenform-Vibrationen

Die älteste Form der Vibration, die auf Android unterstützt wird, sind einfache Ein-/Aus-Muster des Vibrators mit konfigurierbarer Dauer. Diese APIs sind in der Regel nicht gut mit den Designprinzipien für Haptik abgestimmt, da sie brummende Haptik erzeugen können. Verwenden Sie sie nur als letzten Ausweg.

Der häufigste Anwendungsfall für die Vibrationsfunktion „An/Aus“ sind Benachrichtigungen, bei denen unabhängig von der Situation eine gewisse Vibration gewünscht ist. Bei Wellenformvibrationen kann ein Muster auch unendlich wiederholt werden, wie Sie sich vielleicht für einen Klingelton vorstellen können.

Ein Einmal-Muster bedeutet, dass das Gerät einmal für N Millisekunden vibriert.

Es gibt zwei Arten von Wellenformmustern:

  • Nur Zeitangaben Dieser Wellenformtyp beschreibt abwechselnde Zeiten, in denen das Gerät aus- und eingeschaltet ist. Die Zeitangaben beginnen mit der Dauer, in der das Gerät ausgeschaltet ist. Daher beginnen Wellenformmuster oft mit dem Wert „0“, um anzuzeigen, dass sofort mit der Vibration begonnen werden soll.
  • Timings und Amplituden Dieser Wellenformtyp hat ein zusätzliches Array von Amplituden, die mit jeder Zeitfigur übereinstimmen, anstatt das implizite Ein-/Aus der ersten Form. Es ist jedoch wichtig, zu prüfen, ob das Gerät die Amplitudenregelung unterstützt, damit die gewünschte Skalierung erreicht werden kann.

Kompatibilität und Anforderungen

Da das Ein-/Ausschalten von Vibrationen die älteste Form von Vibrationen ist, wird diese Funktion auf nahezu allen Geräten mit einem Vibrator unterstützt, wie weiter unten auf dieser Seite beschrieben.

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

Wenn Sie unterschiedliche Amplitudenwerte in einer Wellenform verwenden, sollten Sie darauf achten, dass das Gerät die Amplitudenregelung unterstützt.

Unterstützung für die Amplitudenregelung prüfen

Amplitudenwerte ungleich 0 werden auf Geräten ohne Amplitudensteuerung auf 100% aufgerundet. Daher ist es wichtig, mit Vibrator.hasAmplitudeControl zu prüfen, ob die Unterstützung vorhanden ist. Weitere Informationen finden Sie unter Amplitudenregelung.

Du solltest sorgfältig überlegen, ob dein Effekt ohne Amplitudenregelung eine ausreichende Qualität hat. Es ist möglicherweise besser, auf eine explizit für das Ein- und Ausschalten konzipierte Vibration zurückzugreifen.

Verwendung von Ein-/Aus-Vibrationen

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

Benachrichtigungs-APIs

Wenn Sie Ihre App-Benachrichtigungen anpassen, können Sie mit einer der folgenden APIs ein Muster mit jedem Benachrichtigungskanal verknüpfen:

Alle diese Formen haben ein einfaches An-/Aus-Wellenformmuster, wie oben beschrieben, wobei der erste Eintrag die Verzögerung vor dem Einschalten des Vibrators ist.

Allgemeine Konzepte

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

Hat das Gerät einen Vibrator?

Sie können eine nicht nullwertige Vibrator-Klasse von context.getSystemService(Vibrator.class) abrufen. Wenn das Gerät keinen Vibrator hat, haben Aufrufe der Vibrations-APIs keine Auswirkungen. Daher müssen Apps nicht alle haptischen Funktionen an eine Bedingung knüpfen. Bei Bedarf kann eine Anwendung jedoch hasVibrator() aufrufen, um zu ermitteln, ob es sich um einen echten Vibrator (true) oder einen Stub (false) handelt.

Hat der Nutzer die Haptik deaktiviert?

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

Vibrationsattribute

Vibrationsattribute (derzeit in Form von AudioAttributes) können angegeben werden, um das System über den Zweck der Vibration zu informieren. Dies ist erforderlich, wenn eine Vibration gestartet werden soll, während Ihre App im Hintergrund ausgeführt wird, da für die Hintergrundnutzung nur haptisches Feedback zur Aufmerksamkeitssteigerung unterstützt wird.

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

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

Amplitudensteuerung

Wenn ein Vibrator eine Amplitudenregelung hat, kann er Vibrationen mit unterschiedlicher Intensität ausführen. Dies ist eine wichtige Funktion für die Erzeugung von ausdrucksstarker Haptik und ermöglicht möglicherweise auch die Nutzersteuerung der Standardhaptikintensitäten.

Ob die Amplitudensteuerung unterstützt wird, kannst du mit Vibrator.hasAmplitudeControl prüfen. Wenn ein Vibrator keine Amplitude unterstützt, werden alle Amplitudenwerte als „Aus“ oder „An“ zugeordnet, je nachdem, ob sie null oder nicht null sind. Daher sollten Apps, die eine umfassende Haptik mit unterschiedlichen Amplituden verwenden, diese deaktivieren, wenn das Gerät keine Amplitudensteuerung hat.

Unterstützung von Umschlageffekten

Vibratoren mit Hüllkurveneffekten unterstützen und ermöglichen die Erstellung dynamischerer und nuancierter Vibrationen. So können Sie Intensität und Schärfe präziser steuern und ein noch intensiveres haptisches Erlebnis genießen. Mit Vibration.areEnvelopeEffectsSupported kannst du prüfen, ob dein Gerät diese Funktion unterstützt. Andernfalls werden envelopebasierte Vibrationen ignoriert.