Nền tảng trải nghiệm người dùng cho khung xúc giác

Tất cả các điểm cải tiến cho khung Android được xây dựng dựa trên xúc giác đều hoạt động dựa trên một tập hợp các nguyên tắc về trải nghiệm người dùng đang phát triển với tốc độ tương đương. Dòng điện các nguyên tắc liên quan đến việc thay thế chế độ rung rì rầm bằng phản hồi xúc giác rõ ràng và khám phá công nghệ xúc giác phong phú.

Nguyên tắc về trải nghiệm người dùng

Hình 1. Các nguyên tắc hiện tại

Bảng sau đây liệt kê tất cả các API xúc giác hiện có.

API Phương thức Đã thêm năm
android.view.HapsFeedbackConstants
  • CONTEXT_CLICK
  • ĐỒNG_HỒNG
  • KHOÁ DỮ LIỆU VIRTUAL_KEY
  • BÀN PHÍM_TAP
  • NH_NHẤN_DÀI
Trước năm 2016
  • KEYBẢNG_PRESS
  • PHÁT HÀNH BÀN PHÍM
  • VĂN BẢN_HANDLE_MOVE
  • PHÁT HÀNH VIDEO NHẠC ĐƠN GIẢN
2017 (Android 8)
  • XÁC NHẬN
  • TỪ CHỐI
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
chế độ xem android.View
  • Biểu diễn hiệu quả phản hồi
Trước năm 2016
android.os.Vibrator
  • rung()
  • hasVibrator()
Trước năm 2016
  • hasAmplitudeControl()
2017 (Android 8)
  • isAllEffectssupported()
  • isAllPrimitivessupported()
  • areEffectsSupported()
  • isPrimitivessupported()
2020 (Android 11)
android.os.RungEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • HIỆU_CHỈNH_TICK
  • Nhấp_vào
  • HIỆU_HEAVY_NHẤP
  • HIỆU LỰC
  • tạo xác định trước()
2019 (Android 10)
android.os.RungEffect.Composition
  • TIÊU_TIỂU_TIẾN
  • PRIMITIVE_CLICK
  • addPrimitive()
  • Compose()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHnapChannelsmute()
2019 (Android 10)

Rung mạnh

Hẹn hò với máy nhắn tin và điện thoại phổ thông, ERM chất lượng thấp nhưng tiết kiệm điện Chế độ rung dựa vào tiếng vo đã được dùng để thay thế cho tiếng chuông nghe chế độ im lặng. Các thành phần phần cứng cũ tạo ra âm thanh ồn ào và khó chịu tiếng ồn có thể gây hại cho trải nghiệm xúc giác do mang lại lượt hiển thị chất lượng thấp (đối với ví dụ: một chiếc điện thoại rẻ, bị hỏng).

Xoá phản hồi xúc giác

Hiệu ứng xúc giác rõ ràng hỗ trợ cảm giác thay đổi trạng thái phân biệt (ví dụ: thay đổi nhị phân trong quá trình bật/tắt nguồn). Do tính chất của thành phần tương tác discrete, các hiệu ứng xúc giác rõ ràng được tạo dưới dạng một thực thể duy nhất (đối với ví dụ: một hiệu ứng xúc giác cho mỗi sự kiện đầu vào).

Mục tiêu của Android là mang lại xúc giác rõ ràng với cảm giác mạnh mẽ nhưng sắc nét hơn là thay vì những cảm giác sôi nổi hoặc bộn bề.

Hằng số xúc giác định sẵn được tạo để hỗ trợ hiệu ứng xúc giác rõ ràng bao gồm sau đây.

Trong 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

Trong VibrationEffect:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Việc xây dựng kiến thức chung giữa nhà sản xuất và nhà phát triển thiết bị là chìa khoá để nâng cao chất lượng tổng thể của phản hồi xúc giác trong hệ sinh thái Android. Sử dụng danh sách kiểm tra cơ bản, đánh giá phần cứng, và CDD. để tìm hiểu thêm về cách triển khai xúc giác.

Nhấn và Phát hành

Hình 3. Nhấn rồi thả ra.

Công nghệ xúc giác phong phú

Xúc giác đa dạng thức là một danh mục xúc giác đang phát triển, vượt ra ngoài phạm vi một danh mục xúc giác đơn hiệu ứng dựa trên xung động. Mục tiêu của Android là hỗ trợ xúc giác phong phú với khả năng kết hợp và điều chỉnh với độ chi tiết nhỏ. Nội dung sau đây các trường hợp sử dụng được hỗ trợ trên Android 11 trở xuống.

Xúc tiến xúc giác phong phú

Hình 4. Hoạt động xúc giác phong phú với hoạ tiết trượt

Kéo và vuốt

Hình 5. Kéo và vuốt

Trường hợp sử dụng 1: Hoạ tiết trượt

Nếu hiệu ứng xúc giác lặp lại trong khi ngón tay trượt qua bề mặt cảm ứng (ví dụ: ví dụ: kéo, vuốt, khám phá bề mặt bằng hoạ tiết xúc giác ảo), hiệu ứng xúc giác lặp lại tốt nhất là sắc nét và tinh tế.

Nếu từng hiệu ứng riêng lẻ gây rối chứ không sắc nét, thì khoảng thời gian giữa có khả năng bị xoá sạch dữ liệu lặp lại. Kết quả là một tiếng vang dài, thay vì so với nhiều tín hiệu rời rạc.

Nếu biên độ không đủ nhỏ, thì năng lượng xúc giác cảm nhận sẽ tích luỹ bằng cách lặp lại, dẫn đến xúc giác cực mạnh ở cuối sự lặp lại.

Triển khai hoạ tiết xúc giác đơn giản cho bề mặt cho các cử chỉ vuốt và kéo

Sử dụng CLOCK_TICKTEXT_HANDLE_MOVE trong HapticFeedbackConstants. Những hằng số này xác định trước các đặc điểm của sự lặp lại và biên độ.

Tạo hiệu ứng của riêng bạn

Để tạo hiệu ứng riêng, hãy soạn một thiết kế bằng cách nối các chuỗi lại với nhau về PRIMITIVE_CLICKPRIMITIVE_TICK inch VibrationEffect.Composition. Bạn có thể điều chỉnh các đặc điểm của thang đo tần suất lặp lại và biên độ đang sử dụng addPrimitive(int primitiveID, float scale, int delay). Dựa vào dịch vụ hỗ trợ thời gian CAP_COMPOSE_EFFECTS của Giao diện HAL của bộ rung.

Trường hợp sử dụng 2: Rung lâu với tác dụng dễ dàng

Rung dài là dao động có biên độ mượt mà chuyển từ 0 sang biên độ mục tiêu. Rung lâu có thể tạo ra sự chú ý dễ nhận biết xúc giác. Tuy nhiên, rung đột ngột trong thời gian dài có thể làm người dùng bị giật mình trong lúc yên tĩnh và thường tạo ra tiếng ồn ào có thể nghe thấy. Để tạo thêm rung lâu dễ chịu, hãy áp dụng hiệu ứng dễ dàng ở đầu đoạn rung. Điều này tạo ra sự chuyển đổi biên độ mượt mà theo hướng biên độ mục tiêu.

Áp dụng hiệu ứng chuyển động

  1. Kiểm tra chức năng phần cứng của tính năng điều khiển biên độ bằng android.os.Vibrator.hasAmplitudeControl().

    • Kết quả phải là true để tạo hiệu ứng dễ dàng với biên độ thay đổi.
  2. Sử dụng VibrationEffect.createWaveform(timings[], amplitudes[], int repeat).

  3. Điều chỉnh chuỗi timings[]amplitudes[] để tạo đường cong chuyển động nhanh, được thể hiện trong Hình 6.

Rung lâu

Hình 6. Đường cong dài, dễ rung

Trường hợp sử dụng 3: Xúc giác kết hợp âm thanh

Xúc giác kết hợp âm thanh là các mẫu xúc giác kết hợp với nhịp điệu của âm thanh để thu hút sự chú ý của người dùng.

Xúc giác kết hợp âm thanh: Lợi ích

Để triển khai phản hồi xúc giác kết hợp âm thanh, hãy kết hợp phản hồi xúc giác rõ ràng với rung lâu. Cảm giác xúc giác mạnh mẽ nhưng ngắn từ xúc giác rõ ràng mang đến cảm giác rời rạc mẫu hình nhịp điệu. Khi kết hợp với các mức kích thích ở mức cao mà trong thời gian dài rung mang lại hiệu quả rất tốt trong việc thu hút sự chú ý của người dùng.

Điều quan trọng là phải cân nhắc đến các kiểu nhịp điệu cảm giác. Nếu không có ý nghĩa nhịp điệu, người dùng cảm nhận các cảm giác xúc giác là những tiếng rung ngẫu nhiên, và có xu hướng bỏ qua chúng.

Cặp âm thanh

Hình 7. Ví dụ về phản hồi xúc giác ghép đôi âm thanh

xúc giác kết hợp âm thanh: Mẹo triển khai

Việc triển khai phản hồi xúc giác kết hợp âm thanh đòi hỏi kiến thức cơ bản về nội dung phát lại cả kênh âm thanh và kênh xúc giác. Hãy lưu ý những điều sau.

  • Sử dụng MediaPlayer hoặc SoundPool khác.

    • Tài sản ở định dạng OGG với một khoá siêu dữ liệu đặc biệt (ANDROID_HAPTIC theo sau là một số kênh xúc giác) cho biết sự hiện diện của dữ liệu xúc giác và hoạt động phát bằng MediaPlayerSoundPool.
  • Cho biết có hỗ trợ phản hồi xúc giác và phát âm thanh trong audio_policy_configuration.xml.

    • Sử dụng hồ sơ đầu ra với kênh xúc giác AUDIO_CHANNEL_OUT_HAPTIC_A|B.
    • Đối với luồng đầu ra có kênh xúc giác, hãy nhớ rằng xúc giác được trình bày dưới dạng kênh bổ sung trong dữ liệu.

    Ví dụ

    Nếu mặt nạ kênh cho luồng đầu ra trông giống như sau:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Sau đó, mỗi mẫu sẽ có dạng như sau:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Thay đổi AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) vào false để phát kênh xúc giác.

    • Theo mặc định, các kênh xúc giác sẽ bị tắt tiếng (true).
    • Các trường hợp sử dụng bao gồm nhạc chuông và âm thanh giao diện người dùng có tính năng đồng bộ xúc giác và phản hồi.
  • HAL Bộ rung phải triển khai hỗ trợ điều khiển bên ngoài.

Xúc giác kết hợp âm thanh

Hình 8. Triển khai phản hồi xúc giác kết hợp âm thanh

Xúc giác xúc giác kết hợp âm thanh: Trình tạo xúc giác

HapticGeneratorHiệu ứng âm thanh được giới thiệu trong Android 12 có thể tạo dữ liệu xúc giác từ một kênh âm thanh và phát video đó theo thời gian thực dưới dạng xúc giác kết hợp âm thanh. Hiệu ứng được áp dụng cho AudioTrack như được mô tả trong Hình 9.

Cấu trúc trình tạo xúc giác

Hình 9. Cấu trúc trình tạo xúc giác

Để đảm bảo thuật toán trình tạo xúc giác của bạn tạo ra xúc giác chất lượng cao, điều chỉnh thuật toán tạo thành động cơ rung của thiết bị bằng cách điều chỉnh các tham số định cấu hình chuỗi bộ lọc mà nó áp dụng cho dạng sóng âm thanh. Phần này mô tả chi tiết về những thông số này và giải thích cách điều chỉnh chúng đến thông số kỹ thuật phần cứng của bạn.

  1. Tần số cộng hưởng cho bộ lọc thông dải

    Tần số cộng hưởng của bộ rung là tần số của bộ truyền động xúc giác có đầu ra tối đa. Tham số này điều chỉnh bộ chống cộng hưởng thành một phần làm phẳng chức năng truyền phản hồi để có băng thông rộng hơn. Khung Android tự động liên kết giá trị này với dữ liệu đầu ra của Phương pháp HAL của bộ rung IVibrator.getResonantFrequency.

    Giá trị mặc định cho tham số này là 150Hz. Bạn có thể sửa đổi điều này trong mã tại đây.

  2. Nguồn chuẩn hoá cho đường bao chậm

    Tham số này xác định số mũ trong quá trình chuẩn hoá một phần (điều khiển khuếch đại tự động). Giá trị mặc định là -0.8, có nghĩa là 80% biến thể phạm vi động đã bị xóa bởi bước kiểm soát khuếch đại này. Bạn có thể sửa đổi thông tin này trong mã tại đây.

  3. Hệ số Q cho bộ lọc điểm dừng

    Hệ số chất lượng bộ rung (hệ số Q) được xác định bởi hai thông số:

    • Zero Q, hệ số chất lượng của các số 0 trong bộ lọc điểm dừng có thể huỷ một phần cộng hưởng.

    • Cực Q, hệ số chất lượng của các cực trong bộ lọc dải dừng.

    Tỷ lệ của hai giá trị đó giới hạn việc triệt tiêu cộng hưởng theo thứ tự để tăng tần số thấp hơn và mở rộng phản hồi của thuật toán. Ví dụ: giá trị mặc định là 8 cho Zero Q và 4 cho sản phẩm cực Q tỷ lệ 2, giới hạn sự ức chế cộng hưởng theo hệ số 2 (6 dB). Khung Android liên kết cả hai giá trị với dữ liệu đầu ra của lớp HAL của bộ rung phương thức IVibrator.getQFactor.

    Nếu các giá trị mặc định không tính đến yếu tố làm giảm cường độ động cơ trong thiết bị của mình, bạn nên sửa đổi cả hai giá trị cùng lúc và tăng cả hai hoặc giảm cả hai. Tỷ số giữa 0 Q và Cực Q phải lớn hơn 1. Bạn có thể sửa đổi thông tin này trong mã tại đây.

  4. Tần suất của góc bị méo

    Tần số góc được áp dụng bởi bộ lọc thông thấp triệt tiêu rung cấp thấp và tăng cường các mức cao hơn bằng cách sử dụng méo lập phương. Giá trị mặc định là 300 Hz. Bạn có thể sửa đổi thông tin này trong mã tại đây.

  5. Mức tăng đầu vào và ngưỡng khối đối với tình trạng méo hình

    Các tham số này được sử dụng bởi bộ lọc biến dạng phi tuyến tính áp dụng cho dạng sóng đầu vào làm giảm biên độ của tín hiệu tần số thấp và thì tần suất xuất hiện sẽ tăng lên.

    • Giá trị mặc định cho hệ số khuếch đại đầu vào là 0,3.
    • Giá trị mặc định cho ngưỡng khối là 0,1.

    Bạn nên sửa đổi cả hai giá trị cùng nhau. Bạn có thể tìm thấy mã này trong mã tại đây.

    Để biết thêm thông tin về hàm được áp dụng bộ lọc này, hãy tham khảo triển khai tính năng này tại đây. Để tìm hiểu thêm về cách hai tham số này ảnh hưởng đến kết quả, chúng ta đề xuất vẽ biểu đồ đáp ứng tần suất của các bộ lọc và quan sát thì phản hồi tần suất thay đổi theo các giá trị thông số khác nhau.

  6. Mức tăng đầu ra khi bị méo

    Tham số này kiểm soát biên độ rung cuối cùng. Lợi ích cuối cùng được áp dụng sau một bộ giới hạn mềm để giới hạn biên độ rung ở mức nhỏ hơn hơn 1. Giá trị mặc định là 1.5 và có thể sửa đổi trong mã tại đây. Nếu mức rung quá nhỏ, hãy tăng giá trị này. Nếu bạn có thể nghe thấy tiếng rung của phần cứng bộ truyền động, hãy giảm giá trị.