實施觸覺

設備製造商通常被視為為每個設備創建的私有資產的所有者。因此,他們的工程工作往往集中在每個設備的基礎;生態系統中其他設備的一致性幾乎不需要任何努力。

在直接的對比,開發商力求構建應用程序的所有Android手機在生態系統中的工作,而不管每個設備的技術規格。這種方法上的差異可能會導致碎片化問題,例如,某些手機的硬件功能與應用程序開發人員設定的預期不符。因此,如果觸覺 API 可在某些 Android 手機上運行,而不能在其他手機上運行,則結果是生態系統不一致。這也是為什麼硬件配置在確保製造商可實現每個設備上的Android觸覺API的關鍵作用。

本頁面提供了設置硬件合規性以充分利用 Android 觸覺 API 的分步清單。

下圖說明了在設備製造商和開發商之間建立共同知識,這是創建有凝聚力的生態系統的關鍵步驟。

應用程序開發人員和設備製造商的觸覺用例圖

設備製造商和開發商之間的圖1.建築知識

觸覺實施清單

  1. 實現常量

    • 實現觸覺的常量列表。
  2. HAL 和 API 之間的映射常量

  3. 評估硬件

    • 關於目標觸覺效果的說明。使用這些說明對您的硬件執行快速檢查。

我們將在下面更詳細地探討每個步驟。

第 1 步:實現常量

執行這些檢查以確定您的設備是否滿足實施觸覺的最低要求。

觸覺實施過程流程圖

圖2.實施效果

實現原語的步驟流程圖

圖3.實現原語

檢查以下觸覺常量的實施狀態。

觸覺常數地點和摘要
EFFECT_TICKEFFECT_CLICKEFFECT_HEAVY_CLICKEFFECT_DOUBLE_CLICK VibrationEffect
在觸覺常量VibrationEffect不包括輸入事件的任何概念,並沒有UI元素。常數包括能量水平代替,如概念EFFECT_CLICKEFFECT_HEAVY_CLICK ,這是由稱為createPredefined()
PRIMITIVE_TICKPRIMITIVE_CLICKPRIMITIVE_LOW_TICK> PRIMITIVE_SLOW_RISEPRIMITIVE_QUICK_RISEPRIMITIVE_QUICK_FALLPRIMITIVE_SPINPRIMITIVE_THUD VibrationEffect.Composition
在觸覺常數VibrationEffect.Composition允許有可伸縮的強度,這是由稱為addPrimitive(int primitiveId, float scale, int delay)

下面描述的替換振動將在不執行設備來執行VibrationEffect常數。建議更新這些配置以在此類設備上獲得最佳性能。

  1. EFFECT_CLICK

    與創建的波形振動VibrationEffect.createWaveform和在被配置的定時frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern

  2. EFFECT_HEAVY_CLICK

    與創建的波形振動VibrationEffect.createWaveform和在被配置的定時frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern

  3. EFFECT_DOUBLE_CLICK

    與創建的波形振動VibrationEffect.createWaveform和定時(0,30,100,30)。

  4. EFFECT_TICK

    與創建的波形振動VibrationEffect.createWaveform和在被配置的定時frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern

測試觸覺反饋的步驟流程圖

圖4.實施反饋常數

檢查以下公共反饋常量的狀態。

觸覺常數地點和摘要

CLOCK_TICKCONTEXT_CLICKKEYBOARD_PRESSKEYBOARD_RELEASEKEYBOARD_TAPLONG_PRESSTEXT_HANDLE_MOVEVIRTUAL_KEYVIRTUAL_KEY_RELEASECONFIRMREJECTGESTURE_STARTGESTURE_END

HapticFeedbackConstants
在觸覺常量HapticFeedbackConstants協助某些UI元素,例如輸入事件KEYBOARD_PRESSKEYBOARD_RELEASE ,這是由稱為performHapticFeedback()

第 2 步:映射 HAL 和 API 之間的常量

步驟 2 介紹了公共 HAL 常量和 API 常量之間的推薦映射。如果步驟 1 中評估的硬件未實現 HAL 常量,則應使用步驟 2 更新步驟 1 中描述的回退模式,以生成類似的輸出。映射由兩個不同的默認模型輔助。

  • 離散模型(簡單)

    • 振幅是該模型的關鍵變量。 HAL 中的每個實體代表不同的觸覺幅度。
    • 此模型是實現基本觸覺 UX 所需的最低要求。
    • 更高級的觸覺 UX 需要高級硬件和高級模型(連續模型)。
  • 連續模式(先進)

    • 紋理和振幅是該模型的關鍵變量。 HAL 中的每個實體代表不同的觸覺紋理。每個HAL實體的幅度通過比例因子(控制S )。
    • 此模型需要高級硬件。如果OEM廠商想使用先進的觸覺UX與VibrationEffect.Composition (最好使用最新的觸覺的API),如果採用這種模式他們的硬件建議。

離散模型

建議使用適當的 HAL 常量映射 API 中提供的所有公共常量。要開始此過程,請找出設備可以在 HAL 中定義多少個具有離散幅度的觸覺波形。一個具體的問題結構圍繞這一概念看起來是這樣的:有多少單脈衝觸覺效果與人感知的幅度差異都可以在我的手機被定義?這個問題的答案決定了映射。

定義 HAL 常量是一個依賴於硬件的過程。例如,入門級手機可能只有硬件功能來生成單個觸覺波形。具有更高級硬件組件的設備會產生更廣泛的離散幅度級別,並且可以在 HAL 中定義多個觸覺波形。 HAL-API 常量映射採用 HAL 常量(使用中等幅度作為基線),然後從那里安排更強或更弱的效果。

HAL 恆定範圍和反饋幅度圖

圖5. HAL恆定範圍由振幅

定義了具有離散幅度的 HAL 常量的數量後,就可以通過 HAL 常量的數量來映射 HAL 和 API 常量了。該映射過程可以將單個脈衝 API 常數分割為最多三個離散的幅度級別組。 API 常量的分段方式基於伴隨輸入事件的 UX 原則。欲了解更多信息,請參閱觸覺UX設計

HAL-API 常量映射的離散模型

圖6. HAL-API常數映射:離散模型

如果您的設備僅支持兩個具有離散幅度的 HAL 常數,請考慮合併中等和高幅度級別的 HAL 常數。這個概念在實踐中的一個例子是映射EFFECT_CLICKEFFECT_HEAVY_CLICK到相同的HAL恆定,這將是中等振幅電平恆定的HAL。如果您的設備只支持一個HAL不變離散幅度,考慮所有三個級別合併成一個。

連續模型

具有幅度可擴展性的連續模型可用於定義 HAL 常數。比例因子( S )可以被施加到HAL常數(例如, HAL_H0HAL_H1 ),以產生經縮放的HAL( HAL_H0 X S )。在這種情況下,縮放後的HAL被映射到定義API常數( HAL_H0 X S1 = H0S1 = EFFECT_TICK )如如圖7所示。通過使用連續模型的振幅可擴展性,設備可以存儲與獨特紋理少數HAL常數並通過調節所述比例因子(添加振幅變化S )。設備製造商可以根據他們想要提供多少不同的觸覺紋理來定義 HAL 常量的數量。

紋理和幅度的 HAL 恆定範圍

圖7. HAL恆定範圍由紋理(HAL_H0)和幅度比例(S)

HAL-API 常量映射的連續模型

圖8. HAL-API常數映射:連續模型

在連續模式,不同HAL常量表示不同的觸覺紋理而不是不同的幅度;比例因子( S )可以配置振幅。但是,由於紋理的感知(例如銳度)與持續時間和幅度的感知有關,因此建議將紋理和比例因子結合起來(在 HAL-API 映射的設計過程中)。

圖 7 通過增加從一個 HAL 到許多具有幅度可擴展性的 API 常量的變化來說明常量映射。

增加變化 1

增加變化 2

與振幅的可擴展性圖9.增加變異

注:上圖中示出恆定的映射的一個特定的實例,因此命名約定是假設。執行此過程對於每個設備製造商來說都是獨一無二的。

對於所有的可擴展API常量如PRIMITIVE_TICKPRIMITIVE_CLICKVibrationEffect.Composition ,該API恆定的能量水平取決於float scale當API常數被聲明通過paramater addPrimitive(int primitiveID, float scale, int delay)PRIMITIVE_TICKPRIMITIVE_CLICK可以設計通過使用不同的HAL常數有明顯的區別。如果你想改變添加紋理建議使用此方法。

第 3 步:評估硬件

硬件評估涉及定義三種觸覺效果,針對此特定評估標記為效果 1、2 和 3。

效果 1:預定義的短觸覺常數

所述VibrationEffect.EFFECT_CLICK常數是它與最常用的效果,在映射在步驟2中提供的HAL-API映射基線效果或公分母HapticFeedbackConstants.KEYBOARD_PRESS 。評估這種影響有助於確定你的目標設備的一切準備就緒明確的觸覺

效果二:短的自定義觸覺效果

VibrationEffect.createOneShot(20,255)不變的是自定義的觸覺效果。簡而言之,單個自定義脈衝,20 毫秒是定義持續時間的推薦最大閾值。不推薦單脈衝大於20ms,因為它視為一種嗡嗡聲振動

短自定義觸覺效果波形

圖10.自定義短觸覺效果

效果 3:具有幅度變化的長自定義觸覺效果

所述VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)恆定為與振幅變化長自定義的效果。以產生不同幅度的自定義觸覺效果的能力的指標來評價設備的功能為一個豐富的觸覺。推薦timings []amplitudes []{500, 500}{128, 255}分別呈現50%振幅的增加趨勢為100%,具有500毫秒的採樣率。

具有幅度變化的觸覺效果波形

圖11.龍振幅隨定制觸覺效果

要檢查振幅控制的硬件能力影響的研究3中,使用Vibrator.hasAmplitudeControl()方法。其結果必須是true執行VibrationEffect.createWaveform與如預期變化的幅度。

主觀觸覺效果評估流程圖

圖12的觸覺效果1,2主題評估,和3

進行主觀評估

要進行快速一致性檢查,請先進行主觀評估。主觀評估的目標是觀察觸覺效果的幅度,以確定設備是否可以產生具有人類可感知幅度的觸覺。

一個具體的問題結構圍繞這個概念看起來是這樣的:可以在設備產生預期的用戶輕鬆地感知觸覺效果?回答這個問題可以幫助你避免失敗的觸覺,包括不易察覺的觸覺用戶感覺不到,或意外的觸覺,其中如預期的波形不產生圖案。