實施觸覺

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

與此形成鮮明對比的是,開發人員努力建立適用於生態系統中所有Android 手機的應用程序,無論每個裝置的技術規格如何。這種方法上的差異可能會導致碎片問題,例如,某些手機的硬體功能與應用程式開發人員設定的期望不符。因此,如果觸覺 API 在某些 Android 手機上運作,但在其他手機上不工作,就會導致生態系統不一致。這就是為什麼硬體配置在確保製造商可以在每個裝置上實現 Android 觸覺 API 方面發揮關鍵作用。

此頁面提供了一個逐步清單,用於設定硬體合規性,以最佳地利用 Android 觸覺 API。

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

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

圖 1.在設備製造商和開發人員之間建構知識

觸覺實施清單

  1. 實現常量

    • 實現觸覺的常量列表。
  2. HAL 和 API 之間的對應常數

    • 公共 API 常數(框架中的命名佔位符)和實作佔位符的 HAL 常數之間的對應建議。
    • 請參閱設計原則來指導建議的映射,以了解有關此過程的更多資訊。
  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_CLICK CONFIRM KEYBOARD_PRESSKEYBOARD_RELEASEKEYBOARD_TAP VIRTUAL_KEY_RELEASE LONG_PRESSTEXT_HANDLE_MOVEVIRTUAL_KEYGESTURE_START REJECT GESTURE_END HapticFeedbackConstants
HapticFeedbackConstants中的觸覺常數透過某些 UI 元素(例如KEYBOARD_PRESSKEYBOARD_RELEASE輔助輸入事件,這些元素由performHapticFeedback()呼叫。

步驟 2:在 HAL 和 API 之間對應常數

步驟 2 顯示公共 HAL 常數和 API 常數之間的建議對應。如果步驟 1 中評估的硬體未實現 HAL 常數,則應使用步驟 2 更新步驟 1 中所述的回退模式,以便產生類似的輸出。映射由兩個不同的預設模型輔助。

  • 離散模型(簡單)

    • 幅度是此模型的關鍵變數。 HAL 中的每個實體代表不同的觸覺幅度。
    • 該模型是實現基本觸覺使用者體驗所需的最低要求。
    • 更先進的觸覺使用者體驗需要先進的硬體和先進的模型(連續模型)。
  • 連續模型(進階)

    • 紋理和振幅是此模型的關鍵變數。 HAL 中的每個實體代表不同的觸覺紋理。每個 HAL 實體的幅度由比例因子 ( S ) 控制。
    • 該模型需要先進的硬體。如果 OEM 希望將高階觸覺 UX 與VibrationEffect.Composition結合使用(為了充分利用最新的觸覺 API),建議使用此模型來實現其硬體。

離散模型

建議將 API 中提供的所有公共常數對應到適當的 HAL 常數。若要開始此流程,請找出裝置可以在 HAL 中定義多少個具有離散幅度的觸覺波形。圍繞著這個概念建構的一個具體問題如下:可以在我的手機中定義多少個具有人類可感知幅度差異的單脈衝觸覺效果?這個問題的答案決定了映射。

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

HAL 恆定範圍與回授幅度圖

圖 5.以幅度劃分的 HAL 常數範圍

當定義了具有離散幅度的 HAL 常數的數量後,就可以透過 HAL 常數的數量來繪製 HAL 和 API 常數了。此映射過程可以將單一脈衝 API 常數分割為最多三個離散的振幅等級群組。 API 常數的分段方式是基於伴隨輸入事件的 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_H0) 和幅度比例 (S) 劃分的 HAL 常數範圍

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

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

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

圖 7 說明了透過增加從一個 HAL 到多個具有幅度可擴展性的 API 常數的變化來進行常數映射。

增加變化 1

增加變化2

圖 9.幅度可擴展性增加變化

對於VibrationEffect.Composition中的所有可擴展 API 常數(例如PRIMITIVE_TICKPRIMITIVE_CLICK ,當透過addPrimitive(int primitiveID, float scale, int delay)聲明 API 常數時,API 常數的能量等級取決於float scale參數。透過使用不同的 HAL 常數,可以將PRIMITIVE_TICKPRIMITIVE_CLICK設計得有明顯的差異。如果您想為紋理添加變化,建議使用此方法。

步驟 3:評估硬體

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

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

VibrationEffect.EFFECT_CLICK常數是步驟 2 中提供的 HAL-API 映射中的基線效果或公分母。它與最常用的效果HapticFeedbackConstants.KEYBOARD_PRESS進行映射。評估這種效果有助於確定目標設備是否已準備好獲得清晰的觸覺

效果 2:簡短的自訂觸覺效果

VibrationEffect.createOneShot(20,255)常數用於自訂觸覺效果。對於短的單一自訂脈衝,建議使用 20 毫秒來定義持續時間的最大閾值。不建議使用超過 20 毫秒的單一脈衝,因為它會被視為嗡嗡聲振動

短自訂觸覺效果的波形

圖 10.簡短的自訂觸覺效果

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

VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)常數用於具有振幅變化的長自訂效果。為客製化觸覺效果產生不同幅度的能力是評估設備豐富觸覺能力的指標之一。建議的timings []amplitudes []分別為{500, 500}{128, 255} ,其呈現幅度從 50% 到 100% 增加的趨勢,取樣率為 500 ms。

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

圖 11.具有幅度變化的長自訂觸覺效果

若要檢查 Effect 3 振幅控制的硬體功能,請使用Vibrator.hasAmplitudeControl()方法。結果必須為true才能如預期執行不同幅度的VibrationEffect.createWaveform

主觀觸覺效果評估流程圖

圖 12.受試者對觸覺效果 1、2 和 3 的評估

進行主觀評估

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

圍繞這個概念建構的一個具體問題如下:設備能否如預期般為使用者產生易於感知的觸覺效果?回答這個問題可以幫助您避免失敗的觸覺,包括使用者感覺不到的難以察覺的觸覺,或波形未如預期產生模式的意外觸覺。