觸覺技術架構的使用者體驗基礎

所有針對觸覺技術所建立的 Android 架構改善項目,皆取決於 一組持續進化的使用者體驗原則。目前 原則上,以清晰的觸覺技術取代震動震動。 探索豐富觸覺回饋

使用者體驗原則

圖 1. 目前原則

下表列出所有可用的觸覺技術 API。

API 方法 已新增年份
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • CLOCK_TICK
  • 虛擬金鑰
  • 鍵盤按鍵
  • 長篇_PRESS
2016 年之前
  • 鍵盤
  • 放開按鍵
  • 文字文字
  • 虛擬金鑰
2017 (Android 8)
  • 確認
  • 拒絕
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
android.View
  • runHapticFeedback()
2016 年之前
android.os.Vibrator
  • 震動
  • hasVibrator()
2016 年之前
  • hasAmplitudeControl()
2017 (Android 8)
  • isAllEffectsSupported()
  • isAllPrimitivesSupported()
  • areEffectsSupported()
  • isPrimitivesSupported()
2020 (Android 11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • 效果
  • 點擊
  • 有效 HEAVY_CLICK
  • 效果 DOUBLE_CLICK
  • createPredefined()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • 撰寫()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
2019 (Android 10)

震動

約會交友服務,以及功能型手機、劣質但省電的 ERM 以往震動的震動是取代聽聲辨曲功能 靜音模式。舊版硬體元件,產生很大聲且令人不悅 音訊雜訊可能會產生低品質的曝光,進而損害觸覺使用者體驗 (例如: 例如便宜的壞手機)。

清晰觸覺回饋

清晰觸覺回饋支援「離散」狀態變更 (例如 二進位檔開啟/關閉期間的二進位檔變更)。由於 離散預設用途和明確的觸覺回饋會做為單一實體產生 (針對 例如每個輸入事件只能有一個觸覺回饋

Android 的目標是提供清晰流暢的觸覺回饋 而不是害羞或害羞

為支援清楚觸覺技術而建立的預先定義觸覺常數包括 以下內容。

HapticFeedbackConstants

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

VibrationEffect

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

掌握裝置製造商與開發人員之間的常見知識,是成功的關鍵 提升 Android 生態系統中的觸覺技術整體品質。使用 基本檢查清單硬體評估CDD。 。

新聞稿

圖 3. 放開與放開。

豐富的觸覺回饋

豐富的觸覺回饋是不斷增長的觸覺技術類別,不再侷限於單曲 衝動式效果Android 的目標是透過高規格的觸覺回饋支援豐富的觸覺技術 精細程度高的可組合性和可調整性。下列 Android 11 以下版本支援各種用途

濃厚觸覺回饋

圖 4. 滑動紋理的豐富觸覺回饋

拖曳及滑動

圖 5. 拖曳與滑動

用途 1:滑動紋理

如果手指在觸控表面滑過觸控表面時又重複觸覺回饋 (例如 包括拖曳、滑動、探索呈現自然觸覺紋理的表面) 重複觸動回饋的效果最好

如果個別效果令人振奮,而不是脆弱 重複情形就可能會被清除。最終成果是一串很長的話題 而非多個獨立信號

如果振幅不夠細,表示感知的觸覺能量會增加 反覆進行,導致最後的觸覺回饋 重複字詞

實作用於滑動和拖曳手勢的簡易表面觸覺紋理

在以下位置使用CLOCK_TICKTEXT_HANDLE_MOVEHapticFeedbackConstants。 這些常數會預先定義重複和振幅的特徵。

製作自己的特效

如要製作自己的效果,請將序列串聯起來進行設計 的 PRIMITIVE_CLICKPRIMITIVE_TICK 英吋 VibrationEffect.Composition。 您可以調整重複和振幅的特性 使用 addPrimitive(int primitiveID, float scale, int delay)。支援服務仰賴 這個 CAP_COMPOSE_EFFECTS 震動器 HAL 介面

用途 2:長震動、緩解效果

長震動是柔和的振動效果,從 0 轉換為 目標振幅長時間震動有助於引起注意 觸覺回饋但是,突然的長時間震動可能導致使用者在安靜 周遭環境,並經常發出嗡嗡聲如要產生 舒緩的長震動,在一長串開頭套用舒緩效果 震動。這可產生流暢的振動轉場效果, 目標振幅

套用減速效果

  1. 使用以下輔助工具檢查振幅控制的硬體功能: android.os.Vibrator.hasAmplitudeControl()

    • 結果必須是 true,才能產生含 振幅可能不同
  2. 使用 VibrationEffectcreateWaveform(timings[], amplitudes[], int repeat)

  3. 調整 timings[]amplitudes[] 的序列以產生 簡化曲線,如圖 6 所示。

長震動

圖 6. 長震動減緩曲線

用途 3:音訊耦合觸覺回饋

音訊耦合觸覺回饋是觸覺回饋模式,以及音訊節奏 吸引觀眾的注意

音訊耦合觸覺回饋:優點

如要實作音訊耦合觸覺回饋,請結合清晰的觸覺回饋和長時間震動。 觸感清晰的觸覺回饋技術極具巧思,能夠帶來離散感 心律不整結合高強度的刺激時 震動功能,因此能有效吸引使用者的注意。

請務必考量感官節奏模式。如果沒有意義 使用者察覺觸覺回饋會隨機發出震動提示 即可忽略這些警告

音樂情侶

圖 7. 音訊情侶觸覺回饋範例

音訊耦合觸覺回饋:實作訣竅

要導入音訊耦合觸覺回饋,必須對內容有基本的瞭解 同時播放音訊和觸覺回饋頻道。請留意下列事項。

  • 使用 MediaPlayerSoundPool 類別

    • 採用 OGG 格式的資產 (含有特殊中繼資料鍵) (ANDROID_HAPTIC 後面接著多個觸覺通道) 代表 呈現觸覺資料,並使用 MediaPlayerSoundPool 播放。
  • 指出支援觸覺和播放音訊 audio_policy_configuration.xml

    • 搭配觸覺技術使用輸出設定檔 AUDIO_CHANNEL_OUT_HAPTIC_A|B
    • 為搭配觸覺器使用的輸出串流,別忘了觸覺回饋 在資料中,所有管道都會以額外頻道的形式呈現。

    示例

    如果輸出串流的頻道遮罩如下所示:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    所有範例看起來應如下所示:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • 變更 AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)false 播放觸覺頻道。

    • 觸覺回饋頻道預設為靜音 (true)。
    • 用途包括鈴聲和同步 UI 音效 以及觸覺回饋和回饋機制
  • 震動器 HAL 必須導入外部控制項支援功能。

音訊耦合觸覺回饋

圖 8. 實作音訊耦合觸覺回饋

音訊組合觸覺回饋:觸覺技術產生器

HapticGenerator音效 它可從音訊聲道產生觸覺資料 以音訊耦合觸覺回饋即時播放。 效果已套用至AudioTrack 如圖 9 中所述。

觸覺發電機架構

圖 9.觸覺發電機架構

為了確保觸覺產生器演算法可產生高品質的觸覺回饋, 調整發射型演算法的 參數,用於設定要套用至音訊波形的篩選器鏈。 本節將詳細說明這些參數,並說明調整方法 您的硬體規格。

  1. 頻道過濾器的相對頻率

    振動器共振頻率是指觸覺回饋器的頻率 的輸出量最大值這個參數會將反共振器調整為部分 壓平合併回應轉移函式,以取得較大的頻寬。 Android 架構會自動將這個值連結至 震動提醒 IVibrator.getResonantFrequency

    這個參數的預設值為 150Hz。您可在 請參閱這裡的程式碼。

  2. 緩慢信封的正規化能力

    此參數可決定部分正規化中的指數 (自動增益控制)。其預設值為 -0.8,表示 這個增益控制步驟將 80% 的動態範圍變化移除。 您可以在這裡修改程式碼。

  3. 制帶停止濾波器的 Q 因數

    震動因素 (Q 係數) 取決於兩個參數:

    • 零 Q,即頻帶濾波器中零元的品質係數 只有部分能消除共振

    • 極點 Q,是頻帶防堵濾波的質量係數。

    這兩個值的比率會限制共振現象依序避免出現 降低頻率並擴大演算法的回應方式例如: 零 Q 為 8,而 Pole Q 會產生 4 預設值 比例為 2,將共振率抑制限制為 2 (6 dB)。 Android 架構會將這兩個值連結至 Vibrator HAL 的輸出內容 IVibrator.getQFactor 方法。

    預設值不含馬達力量的阻尼 我們建議您同時修改這兩種值,並且 您可以同時提高或降低零 Q 與 Pole Q 的比率 應大於 1。您可以在這裡修改程式碼。

  4. 變形頻率變形

    角落頻率由抑制的濾鏡套用 低階震動並使用立方變形,提高音量。 預設值為「300Hz」。您可以在這裡修改程式碼。

  5. 輸入增益和立方門檻

    凡是套用至 波形的輸入波形會減少頻率信號的振幅 才能提高播放頻率

    • 輸入增益因數的預設值為 0.3
    • 立方門檻的預設值為 0.1

    建議您同時修改這兩個值。您可以在程式碼中找到 請按這裡

    如要進一步瞭解此篩選器套用的函式,請參閱 請參閱這裡的說明。 如要進一步瞭解這兩個參數對輸出內容的影響, 建議您繪製篩選器頻率回應圖表 頻率回應會隨著不同的參數值而變化

  6. 變形的輸出內容增益

    此參數可控制最終的振動振幅。這是最後的提升 是在限制振動效果後套用的輕微限縮器後套用 大於 1。其預設值為 1.5,可在程式碼中修改 請參閱這篇文章。 如果振動幅度太小,請調高數值。你聽得到 ,降低此值。