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:
VIBRATION_EFFECT_SUPPORT_YES
gibt an, dass das Gerät diesen Effekt optimal unterstützt.VIBRATION_EFFECT_SUPPORT_NO
gibt an, dass das Gerät keine optimierte Unterstützung bietet, verwendet aber trotzdem das Plattform-Fallback.VIBRATION_EFFECT_SUPPORT_UNKNOWN
gibt an, dass das System nicht weiß, ob die Implementierung optimiert ist.
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:
- AndroidX
- Android
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.