Haptik umsetzen

Gerätehersteller gelten im Allgemeinen als Eigentümer der privaten Vermögenswerte, die für jedes Gerät erstellt werden. Daher konzentrieren sich ihre Engineering-Bemühungen oft auf eine Pro-Gerät-Basis ; Es wird wenig bis gar kein Aufwand für die Konsistenz anderer Geräte im Ökosystem aufgewendet.

Im direkten Gegensatz dazu streben Entwickler danach, Apps zu entwickeln, die auf allen Android-Telefonen im Ökosystem funktionieren, unabhängig von den technischen Spezifikationen der einzelnen Geräte. Dieser unterschiedliche Ansatz kann zu einem Fragmentierungsproblem führen, z. B. wenn die Hardwarefunktionen bestimmter Telefone nicht den Erwartungen der App-Entwickler entsprechen. Wenn also die haptischen APIs auf einigen Android-Telefonen funktionieren, auf anderen nicht, ist das Ergebnis ein inkonsistentes Ökosystem. Aus diesem Grund spielt die Hardwarekonfiguration eine entscheidende Rolle, um sicherzustellen, dass Hersteller Android-Haptik-APIs auf jedem Gerät implementieren können.

Diese Seite enthält eine Schritt-für-Schritt-Checkliste zum Einrichten der Hardwarekonformität für die optimale Nutzung der Android-Haptik-APIs.

Die folgende Abbildung veranschaulicht den Aufbau von gemeinsamem Wissen zwischen Geräteherstellern und Entwicklern, was ein entscheidender Schritt bei der Schaffung eines zusammenhängenden Ökosystems ist.

Diagramm von Haptik-Anwendungsfällen für App-Entwickler und Gerätehersteller

Abbildung 1. Aufbau von Wissen zwischen Geräteherstellern und Entwicklern

Checkliste für die Haptik-Implementierung

  1. Implementieren Sie Konstanten

    • Liste von Konstanten zum Implementieren von Haptik.
  2. Konstanten zwischen HAL und API abbilden

  3. Bewerten Sie die Hardware

    • Anleitung zu gezielten haptischen Effekten. Verwenden Sie diese Anweisungen, um schnelle Überprüfungen Ihrer Hardware durchzuführen.

Wir werden jeden dieser Schritte weiter unten genauer untersuchen.

Schritt 1: Implementieren Sie Konstanten

Führen Sie diese Überprüfungen durch, um festzustellen, ob Ihr Gerät die Mindestanforderungen zum Implementieren von Haptik erfüllt.

Flussdiagramm des Haptik-Implementierungsprozesses

Abbildung 2. Implementieren von Effekten

Flussdiagramm der Schritte zum Implementieren von Primitives

Abbildung 3. Primitive implementieren

Überprüfen Sie den Implementierungsstatus der folgenden haptischen Konstanten.

Haptische Konstanten Standorte und Zusammenfassungen
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK VibrationEffect -Klasse
Haptische Konstanten in VibrationEffect beinhalten keine Vorstellung von Eingabeereignissen und haben keine UI-Elemente. Konstanten beinhalten stattdessen den Begriff der Energieniveaus, wie EFFECT_CLICK und EFFECT_HEAVY_CLICK , die von createPredefined() aufgerufen werden.
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD VibrationEffect.Composition -Klasse
Haptische Konstanten in VibrationEffect.Composition dürfen eine skalierbare Intensität haben, die von addPrimitive(int primitiveId, float scale, int delay) aufgerufen wird.

Die unten beschriebenen alternativen Vibrationen werden auf Geräten ausgeführt, die die VibrationEffect Konstanten nicht implementieren. Es wird empfohlen, diese Konfigurationen zu aktualisieren, um auf solchen Geräten die beste Leistung zu erzielen.

  1. EFFECT_CLICK

    Mit VibrationEffect.createWaveform erstellte Wellenformvibration und die unter frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern .

  2. EFFECT_HEAVY_CLICK

    Mit VibrationEffect.createWaveform erstellte Wellenformvibration und die unter frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    Wellenformvibration erstellt mit VibrationEffect.createWaveform und den Timings (0, 30, 100, 30).

  4. EFFECT_TICK

    Mit VibrationEffect.createWaveform erstellte Wellenformvibration und die unter frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Flussdiagramm der Schritte zum Testen des haptischen Feedbacks

Abbildung 4. Implementieren von Feedback-Konstanten

Überprüfen Sie den Status der folgenden öffentlichen Feedback-Konstanten.

Haptische Konstanten Standorte und Zusammenfassungen

CLOCK_TICK , CONTEXT_CLICK , KEYBOARD_PRESS , KEYBOARD_RELEASE , KEYBOARD_TAP , LONG_PRESS , TEXT_HANDLE_MOVE , VIRTUAL_KEY , VIRTUAL_KEY_RELEASE , CONFIRM , REJECT , GESTURE_START , GESTURE_END

HapticFeedbackConstants -Klasse
Haptische Konstanten in HapticFeedbackConstants unterstützen Eingabeereignisse mit bestimmten UI-Elementen wie KEYBOARD_PRESS und KEYBOARD_RELEASE , die von performHapticFeedback() aufgerufen werden.

Schritt 2: Konstanten zwischen HAL und API zuordnen

Schritt 2 präsentiert empfohlene Zuordnungen zwischen öffentlichen HAL-Konstanten und API-Konstanten. Wenn die in Schritt 1 bewertete Hardware die HAL-Konstanten nicht implementiert, sollte Schritt 2 verwendet werden, um die in Schritt 1 beschriebenen Fallback-Muster zu aktualisieren, um ähnliche Ausgaben zu generieren. Das Mapping wird durch zwei unterschiedliche Default-Modelle unterstützt.

  • Diskretes Modell (einfach)

    • Die Amplitude ist die Schlüsselvariable dieses Modells. Jede Entität in der HAL repräsentiert eine andere haptische Amplitude.
    • Dieses Modell ist eine Mindestanforderung, die benötigt wird, um die grundlegende haptische UX zu implementieren.
    • Eine fortschrittlichere haptische UX erfordert fortschrittliche Hardware und ein fortschrittliches Modell (kontinuierliches Modell).
  • Kontinuierliches Modell (fortgeschritten)

    • Textur und Amplitude sind die Schlüsselvariablen dieses Modells. Jede Entität in der HAL repräsentiert unterschiedliche haptische Texturen. Die Amplitude jeder HAL-Entität wird durch den Skalierungsfaktor ( S ) gesteuert.
    • Dieses Modell erfordert fortschrittliche Hardware. Wenn OEMs erweiterte haptische UX mit VibrationEffect.Composition verwenden möchten (für die beste Nutzung der neuesten haptischen APIs), wird empfohlen, ihre Hardware mit diesem Modell zu implementieren.

Diskretes Modell

Es wird empfohlen, alle in der API bereitgestellten öffentlichen Konstanten den entsprechenden HAL-Konstanten zuzuordnen. Finden Sie zu Beginn dieses Prozesses heraus, wie viele haptische Wellenformen mit diskreter Amplitude das Gerät im HAL definieren kann. Eine spezifische Frage, die um diesen Begriff herum strukturiert ist, sieht folgendermaßen aus: Wie viele haptische Einzelimpulseffekte mit vom Menschen wahrnehmbaren Amplitudenunterschieden können in meinem Telefon definiert werden? Die Antwort auf diese Frage bestimmt das Mapping.

Das Definieren von HAL-Konstanten ist ein hardwareabhängiger Prozess. Beispielsweise verfügt ein Telefon der Einstiegsklasse möglicherweise nur über die Hardwarefähigkeiten, um eine einzelne haptische Wellenform zu erzeugen. Geräte mit fortschrittlicheren Hardwarekomponenten erzeugen einen größeren Bereich diskreter Amplitudenpegel und können mehrere haptische Wellenformen in der HAL definieren. Die HAL-API-Konstantenzuordnung nimmt die HAL-Konstante (unter Verwendung der mittleren Amplitude als Basislinie) und arrangiert dann stärkere oder schwächere Effekte von dort aus.

Diagramm des konstanten HAL-Bereichs und der Rückkopplungsamplituden

Abbildung 5. HAL-Konstantbereich nach Amplitude

Wenn die Anzahl der HAL-Konstanten mit diskreter Amplitude definiert ist, ist es an der Zeit, die HAL- und API-Konstanten der Anzahl der HAL-Konstanten zuzuordnen. Dieser Abbildungsprozess kann eine einzelne Impuls-API-Konstante in bis zu drei diskrete Gruppen von Amplitudenpegeln segmentieren. Die Art und Weise, wie API-Konstanten segmentiert werden, basiert auf UX-Prinzipien für begleitende Eingabeereignisse. Weitere Informationen finden Sie unter Haptics UX-Design .

Diskretes Modell für HAL-API-Konstantenzuordnung

Abbildung 6. HAL-API-Konstantenzuordnung: Diskretes Modell

Wenn Ihr Gerät nur zwei HAL-Konstanten mit diskreten Amplituden unterstützt, sollten Sie die HAL-Konstanten mit mittlerer und hoher Amplitude zusammenführen. Ein praktisches Beispiel für diesen Begriff wäre das Abbilden EFFECT_CLICK und EFFECT_HEAVY_CLICK auf dieselbe HAL-Konstante, die die HAL-Konstante für den mittleren Amplitudenpegel wäre. Wenn Ihr Gerät nur eine HAL-Konstante mit diskreter Amplitude unterstützt, sollten Sie alle drei Ebenen zu einer zusammenführen.

Kontinuierliches Modell

Das kontinuierliche Modell mit Amplituden-Skalierbarkeit kann angewendet werden, um HAL-Konstanten zu definieren. Auf die HAL-Konstanten (z. B. HAL_H0 , HAL_H1 ) kann ein Skalierungsfaktor ( S ) angewendet werden, um den skalierten HAL ( HAL_H0 x S ) zu erzeugen. In diesem Fall wird der skalierte HAL abgebildet, um API-Konstanten zu definieren ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ), wie in Abbildung 7 gezeigt. Durch die Verwendung der Amplitudenskalierbarkeit des kontinuierlichen Modells kann ein Gerät eine kleine Anzahl von HAL-Konstanten mit unterschiedlichen Texturen speichern und Amplitudenvariationen durch Anpassen des Skalierungsfaktors ( S ) hinzufügen. Gerätehersteller können die Anzahl der HAL-Konstanten basierend darauf definieren, wie viele verschiedene haptische Texturen sie bereitstellen möchten.

HAL konstanter Bereich nach Textur und Amplitude

Abbildung 7. HAL-Konstantbereich nach Textur (HAL_H0) und Amplitudenskala (S)

Kontinuierliches Modell für HAL-API-Konstantenzuordnung

Abbildung 8. HAL-API-Konstantenzuordnung: Kontinuierliches Modell

In dem kontinuierlichen Modell repräsentieren unterschiedliche HAL-Konstanten eher unterschiedliche haptische Texturen als unterschiedliche Amplituden; Der Skalierungsfaktor ( S ) kann die Amplitude konfigurieren. Da jedoch die Wahrnehmung der Textur (z. B. Schärfe) mit der Wahrnehmung der Dauer und Amplitude zusammenhängt, wird empfohlen, die Textur und den Skalierungsfaktor (im Designprozess des HAL-API-Mappings) zu kombinieren.

Fig. 7 veranschaulicht die konstante Abbildung durch Erhöhen der Variation von einer HAL zu vielen API-Konstanten mit Amplituden-Skalierbarkeit.

Variation erhöhen 1

Steigerung der Variation 2

Abbildung 9. Zunehmende Variation mit Amplitudenskalierbarkeit

Hinweis: Die obige Abbildung zeigt eine bestimmte Instanz der Konstantenzuordnung, daher sind die Namenskonventionen hypothetisch. Die Durchführung dieses Prozesses ist für jeden Gerätehersteller einzigartig.

Für alle skalierbaren API-Konstanten wie PRIMITIVE_TICK und PRIMITIVE_CLICK in VibrationEffect.Composition hängt das Energieniveau der API-Konstante vom float scale -Parameter ab, wenn die API-Konstante über addPrimitive(int primitiveID, float scale, int delay) deklariert wird. PRIMITIVE_TICK und PRIMITIVE_CLICK können durch die Verwendung unterschiedlicher HAL-Konstanten klar getrennt gestaltet werden. Dieser Ansatz wird empfohlen, wenn Sie der Textur Variation hinzufügen möchten.

Schritt 3: Bewerten Sie die Hardware

Die Hardwarebewertung umfasst die Definition von drei haptischen Effekten, die für diese spezifische Bewertung als Effekte 1, 2 und 3 bezeichnet werden.

Effekt 1: Vordefinierte kurze haptische Konstanten

Die Konstante VibrationEffect.EFFECT_CLICK ist der Grundlinieneffekt oder gemeinsame Nenner in der in Schritt 2 bereitgestellten HAL-API-Zuordnung. Sie ist dem am häufigsten verwendeten Effekt zugeordnet, HapticFeedbackConstants.KEYBOARD_PRESS . Die Bewertung dieses Effekts hilft dabei, die Bereitschaft Ihres Zielgeräts für eine klare Haptik zu bestimmen.

Effekt 2: Kurzer benutzerdefinierter haptischer Effekt

Die VibrationEffect.createOneShot(20,255) ist für benutzerdefinierte haptische Effekte. Für kurze, einzelne benutzerdefinierte Impulse ist 20 ms die empfohlene maximale Schwelle zum Definieren der Dauer. Ein einzelner Impuls, der länger als 20 ms ist, wird nicht empfohlen, da er als summende Vibration wahrgenommen wird .

Wellenform eines kurzen benutzerdefinierten haptischen Effekts

Abbildung 10. Kurzer benutzerdefinierter haptischer Effekt

Effekt 3: Langer benutzerdefinierter haptischer Effekt mit Amplitudenvariation

Die Konstante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) ist für lange benutzerdefinierte Effekte mit Amplitudenvariation vorgesehen. Die Fähigkeit, unterschiedliche Amplituden für benutzerdefinierte haptische Effekte zu erzeugen, ist einer der Indikatoren, um die Fähigkeiten des Geräts für reichhaltige Haptik zu bewerten. Die empfohlenen timings [] und amplitudes [] sind {500, 500} bzw. {128, 255} , was bei einer Abtastrate von 500 ms einen zunehmenden Trend der Amplitude von 50 % auf 100 % darstellt.

Haptische Effektwellenform mit Amplitudenvariation

Abbildung 11. Langer benutzerdefinierter haptischer Effekt mit Amplitudenvariation

Verwenden Sie die Methode Vibrator.hasAmplitudeControl() , um die Hardwarefähigkeiten der Amplitudensteuerung für Effekt 3 zu überprüfen. Das Ergebnis muss true sein, um VibrationEffect.createWaveform wie beabsichtigt mit variierender Amplitude auszuführen.

Flussdiagramm der subjektiven haptischen Wirkungsbewertung

Abbildung 12. Probandenbewertung des haptischen Effekts 1, 2 und 3

Durchführung einer subjektiven Bewertung

Führen Sie für eine schnelle Kohärenzprüfung zunächst eine subjektive Bewertung durch. Das Ziel der subjektiven Bewertung ist es, die Amplitude der haptischen Effekte zu beobachten, um festzustellen, ob das Gerät Haptiken mit menschlich wahrnehmbaren Amplituden erzeugen kann.

Eine spezifische Frage, die um diesen Begriff herum strukturiert ist, sieht folgendermaßen aus: Kann das Gerät wie erwartet leicht wahrnehmbare haptische Effekte für die Benutzer erzeugen? Die Beantwortung dieser Frage hilft Ihnen, fehlerhafte Haptik zu vermeiden, einschließlich nicht wahrnehmbarer Haptik, die Benutzer nicht fühlen können, oder unbeabsichtigter Haptik, bei der Wellenformen nicht wie beabsichtigt Muster erzeugen.