裝置製造商通常會被視為為每部裝置建立的私人資產擁有者。因此,他們的工程工作通常著重於個別裝置;對生態系統中其他裝置的一致性則幾乎不做任何努力。
相反地,開發人員會盡力建構可在生態系統中所有 Android 手機上運作的應用程式,無論各裝置的技術規格為何都沒問題。這種方法上的差異可能會導致分散化問題,例如某些手機的硬體功能不符合應用程式開發人員設定的預期。因此,如果觸覺 API 僅適用於部分 Android 手機,其他手機則無法運作,就會產生不一致的生態系統。因此,硬體設定在確保製造商可在每部裝置上實作 Android 觸覺回饋 API 方面,扮演著至關重要的角色。
本頁提供逐步檢查清單,協助您設定硬體法規遵循以充分運用 Android 觸覺技術 API。
下圖說明如何在裝置製造商和開發人員之間建立共同知識,這是建立完整生態系統的重要步驟。
圖 1. 增進裝置製造商與開發人員之間的知識
觸覺回饋實作檢查清單
-
- 實作觸覺回饋的常數清單。
-
- 建議您在公開 API 常數 (在架構中稱為「預留位置」) 和 HAL 常數之間建立對應關係,以便實作預留位置。
- 如要進一步瞭解這項程序,請參閱「設計原則,可用於引導建議的對應方式」。
-
- 指定觸覺回饋效果的操作說明。請按照以下操作說明快速檢查硬體。
以下將詳細說明各個步驟。
步驟 1:實作常數
執行這些檢查,判斷裝置是否符合實作觸覺回饋的最低需求。
圖 2. 實作效果
圖 3. 實作基本元素
檢查下列觸覺常數的實作狀態。
觸覺回饋常數 | 位置和摘要 |
---|---|
EFFECT_TICK 、EFFECT_CLICK 、EFFECT_HEAVY_CLICK 、EFFECT_DOUBLE_CLICK |
VibrationEffect 類別VibrationEffect 中的觸覺常數不含任何輸入事件概念,也沒有 UI 元素。常數則包含能量層級的概念,例如 EFFECT_CLICK 和 EFFECT_HEAVY_CLICK ,這些項目會由
createPredefined() 呼叫。 |
PRIMITIVE_TICK ,PRIMITIVE_CLICK ,PRIMITIVE_LOW_TICK> ,PRIMITIVE_SLOW_RISE ,PRIMITIVE_QUICK_RISE ,PRIMITIVE_QUICK_FALL ,PRIMITIVE_SPIN ,PRIMITIVE_THUD |
VibrationEffect.Composition 類別: VibrationEffect.Composition 中的觸覺常數可具有可調整的強度,並由
addPrimitive(int primitiveId, float scale, int delay) 呼叫。 |
下文說明的替代震動是在未實作 VibrationEffect
常數的裝置上執行。建議您更新這些設定,以便在這些裝置上獲得最佳效能。
EFFECT_CLICK
使用
VibrationEffect.createWaveform
建立的振動波形,以及在frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
設定的時間。EFFECT_HEAVY_CLICK
使用
VibrationEffect.createWaveform
和frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern
所設定的時間,建立波形震動。EFFECT_DOUBLE_CLICK
使用
VibrationEffect.createWaveform
和時間 (0、30、100、30) 建立的振動波形。EFFECT_TICK
使用
VibrationEffect.createWaveform
和frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
所設定的時間,建立波形震動。
圖 4. 實作意見回饋常數
檢查下列公開意見回饋常數的狀態。
觸覺常數 | 位置和摘要 |
---|---|
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 類別 HapticFeedbackConstants 中的觸覺常數可協助輸入事件使用特定 UI 元素,例如 KEYBOARD_PRESS 和 KEYBOARD_RELEASE ,這些元素會由 performHapticFeedback() 呼叫。 |
步驟 2:在 HAL 和 API 之間對應常數
步驟 2 會列出公開 HAL 常數和 API 常數之間的建議對應項目。如果步驟 1 評估的硬體未實作 HAL 常數,則應使用步驟 2 更新步驟 1 所述的備用模式,以便產生類似的輸出內容。這項對應作業會由兩個不同的預設模型協助完成。
離散模型 (簡單)
- 振幅是這個模型的重要變數。HAL 中的每個實體代表不同的觸覺振幅。
- 這個模型是實作基本觸覺使用者體驗所需的最低需求。
- 更進階的觸覺回饋使用者體驗需要進階硬體和進階模型 (持續性模型)。
持續式模型 (進階)
- 紋理和振幅是此模型的重要變數。HAL 中的每個實體都代表不同的觸覺回饋紋理。每個 HAL 實體的振幅由比例因數 (
S
) 控制。 - 這個模型需要進階硬體。如果原始設備製造商 (OEM) 想使用進階觸覺回饋使用者體驗搭配
VibrationEffect.Composition
(以便充分運用最新的觸覺回饋 API),建議使用這個模型導入硬體。
- 紋理和振幅是此模型的重要變數。HAL 中的每個實體都代表不同的觸覺回饋紋理。每個 HAL 實體的振幅由比例因數 (
離散模型
建議您將 API 中提供的所有公開常數與適當的 HAL 常數對應。如要開始這項程序,請找出裝置可在 HAL 中定義多少個具有離散振幅的觸覺波形。以該概念為架構的具體問題如下:在手機中,可以定義多少種單一衝動觸覺效果,且這些效果的振幅差異能讓使用者察覺?這項問題的答案會決定對應方式。
定義 HAL 常數是硬體相關的程序。舉例來說,入門級手機可能只有產生單一觸覺回饋波形的硬體功能。配備更先進硬體元件的裝置可產生更廣泛的離散振幅等級,並可在 HAL 中定義多種觸覺回饋波形。HAL-API 常數對應會採用 HAL 常數 (使用中等振幅做為基準),然後安排較強或較弱的效果。
圖 5. 依振幅計算 HAL 常數範圍
定義具有離散振幅的 HAL 常數數量後,就可以根據 HAL 常數數量對應 HAL 和 API 常數。這項對應程序可將單一衝量 API 常數區分為最多三個幅度層級群組。API 常數的區隔方式,取決於隨附輸入事件的使用者體驗原則。詳情請參閱觸覺回饋使用者體驗設計。
圖 6. HAL-API 常數對應:離散模型
如果裝置僅支援兩個具有離散振幅的 HAL 常數,請考慮合併中等和高振幅 HAL 常數。其中一個實務範例是將 EFFECT_CLICK
和 EFFECT_HEAVY_CLICK
對應至相同的 HAL 常數,也就是中振幅等級 HAL 常數。如果您的裝置只支援一個 HAL 常數,且振幅為離散值,建議您將所有三個等級合併為一個。
連續模型
可將具有振幅可擴展性的連續模型套用至定義 HAL 常數。縮放比例係數 (S
) 可以套用至 HAL 常數 (例如 HAL_H0
、HAL_H1
),以產生經過調整的 HAL (HAL_H0
x S
)。在此情況下,縮放的 HAL 會對應至定義 API 常數 (HAL_H0
x S1
= H0S1
= EFFECT_TICK
),如圖 7 所示。透過連續模式的振幅可擴展性,裝置可儲存少量具有獨特觸覺回饋紋理的 HAL 常數,並透過調整比例因數 (S
) 新增振幅變化。裝置製造商可根據要提供的觸覺回饋紋理數量,定義 HAL 常數的數量。
圖 7. 根據紋理 (HAL_H0) 和振幅比例 (S) 設定 HAL 常數範圍
圖 8. HAL-API 常數對應:連續模式
在連續模型中,不同的 HAL 常數代表不同的觸覺紋理,而非不同的振幅;比例因數 (S
) 可以設定振幅。不過,由於紋理感知 (例如清晰度) 與時間和振幅感知相關,因此建議在 HAL API 對應的設計過程中,結合紋理和縮放比例係數。
圖 7 說明瞭常數對應,從一個 HAL 到多個 API 常數,並增加振幅可擴展性。
圖 9.利用振幅擴展功能增加變化
對於所有可調整的 API 常數 (例如 VibrationEffect.Composition
中的 PRIMITIVE_TICK
和 PRIMITIVE_CLICK
),如果 API 常數是透過 addPrimitive(int primitiveID, float scale,
int delay)
宣告,則 API 常數的能量等級會取決於 float scale
參數。PRIMITIVE_TICK
和 PRIMITIVE_CLICK
可使用不同的 HAL 常數,設計出清晰的差異。如果您想為紋理新增變化,建議採用這種做法。
步驟 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 毫秒。
圖 11. 振幅變化長自訂觸覺效果
如要檢查效果 3 的振幅控制硬體功能,請使用 Vibrator.hasAmplitudeControl()
方法。結果必須是 true
,才能依預期執行 VibrationEffect.createWaveform
,並以不同的振幅變化。
圖 12. 觸覺效應 1、2 和 3 的受試者評估
進行主觀評估
如要快速檢查一致,請先進行主觀評估。主觀評估的目標是觀察觸覺效果的振幅,判斷裝置是否能產生人類可感知的振幅觸覺效果。
以這項概念為架構的具體問題如下:裝置是否能如預期為使用者產生可感知的觸覺效果?回答這個問題有助於避免觸覺失效,包括使用者無法感覺到的微弱觸覺回饋,或是波形未如預期產生模式的非預期觸覺回饋。
執行進階評估
強烈建議您進行進階品質評估。進階品質評估程序會將觸覺效果的可量化屬性加以分類,實作品質觸覺回饋。完成後,裝置製造商應能診斷目前的觸覺狀態,藉此設定目標來改善整體品質。請參閱硬體評估。