Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Triển khai haptics

Các nhà sản xuất thiết bị thường được coi là chủ sở hữu tài sản riêng được tạo cho mỗi thiết bị. Do đó, các nỗ lực kỹ thuật của họ thường tập trung vào cơ sở từng thiết bị ; ít hoặc không cần nỗ lực để đạt được tính nhất quán của các thiết bị khác trong hệ sinh thái.

Ngược lại, các nhà phát triển cố gắng xây dựng các ứng dụng hoạt động trên tất cả các điện thoại Android trong hệ sinh thái, bất kể thông số kỹ thuật của từng thiết bị. Sự khác biệt trong cách tiếp cận này có thể gây ra sự cố phân mảnh, chẳng hạn như khả năng phần cứng của một số điện thoại không phù hợp với kỳ vọng do nhà phát triển ứng dụng đặt ra. Vì vậy, nếu API haptics hoạt động trên một số điện thoại Android nhưng không hoạt động trên các điện thoại khác, thì kết quả là một hệ sinh thái không nhất quán. Đây là lý do tại sao cấu hình phần cứng đóng một vai trò quan trọng trong việc đảm bảo rằng các nhà sản xuất có thể triển khai API haptics của Android trên mọi thiết bị.

Trang này cung cấp danh sách kiểm tra từng bước để thiết lập việc tuân thủ phần cứng nhằm sử dụng tốt nhất API haptics của Android.

Hình bên dưới minh họa việc xây dựng kiến ​​thức chung giữa các nhà sản xuất và nhà phát triển thiết bị, đây là một bước quan trọng trong việc tạo ra một hệ sinh thái gắn kết.

Sơ đồ các trường hợp sử dụng haptics dành cho nhà phát triển ứng dụng và nhà sản xuất thiết bị

Hình 1. Xây dựng kiến ​​thức giữa nhà sản xuất thiết bị và nhà phát triển

Danh sách kiểm tra triển khai haptics

  1. Thực hiện các hằng số

    • Danh sách các hằng số để triển khai haptics.
  2. Ánh xạ các hằng số giữa HAL và API

  3. Đánh giá phần cứng

    • Hướng dẫn về hiệu ứng xúc giác mục tiêu. Sử dụng các hướng dẫn này để thực hiện kiểm tra nhanh trên phần cứng của bạn.

Chúng ta sẽ khám phá từng bước chi tiết hơn bên dưới.

Bước 1: Thực hiện các hằng số

Thực hiện các bước kiểm tra này để xác định xem thiết bị của bạn có đáp ứng các yêu cầu tối thiểu để triển khai haptics hay không.

Sơ đồ quy trình thực hiện haptics

Hình 2. Thực hiện các hiệu ứng

Sơ đồ các bước để thực hiện nguyên thủy

Hình 3. Thực hiện nguyên hàm

Kiểm tra trạng thái triển khai của các hằng số xúc giác sau.

hằng số haptic Vị trí và tóm tắt
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK Lớp VibrationEffect
Hằng số xúc giác trong VibrationEffect không bao gồm bất kỳ khái niệm nào về sự kiện đầu vào và không có thành phần giao diện người dùng. Thay vào đó, các hằng số bao gồm khái niệm mức năng lượng, chẳng hạn như EFFECT_CLICKEFFECT_HEAVY_CLICK , được gọi bởi createPredefined() .
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD Lớp VibrationEffect.Composition
Các hằng số xúc giác trong VibrationEffect.Composition được phép có cường độ có thể mở rộng, được gọi bằng addPrimitive(int primitiveId, float scale, int delay) .

Các rung thay thế được mô tả bên dưới sẽ được thực hiện trên các thiết bị không triển khai hằng số Hiệu ứng VibrationEffect . Bạn nên cập nhật các cấu hình này để hoạt động tốt nhất trên các thiết bị đó.

  1. EFFECT_CLICK

    Rung động dạng sóng được tạo bằng VibrationEffect.createWaveform và thời gian được định cấu hình tại frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern .

  2. EFFECT_HEAVY_CLICK

    Rung động dạng sóng được tạo bằng VibrationEffect.createWaveform và thời gian được định cấu hình tại frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    Rung động dạng sóng được tạo bằng VibrationEffect.createWaveform và thời gian (0, 30, 100, 30).

  4. EFFECT_TICK

    Rung động dạng sóng được tạo bằng VibrationEffect.createWaveform và thời gian được định cấu hình tại frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Sơ đồ các bước thử nghiệm phản hồi xúc giác

Hình 4. Thực hiện các hằng số phản hồi

Kiểm tra trạng thái của các hằng số phản hồi công khai sau đây.

hằng số haptic Vị trí và tóm tắt

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
Các hằng số xúc giác trong HapticFeedbackConstants hỗ trợ các sự kiện đầu vào với một số phần tử giao diện người dùng nhất định, chẳng hạn như KEYBOARD_PRESSKEYBOARD_RELEASE , được gọi bởi performHapticFeedback() .

Bước 2: Ánh xạ hằng số giữa HAL và API

Bước 2 trình bày các ánh xạ được đề xuất giữa hằng số HAL công khai và hằng số API. Nếu phần cứng được đánh giá ở Bước 1 không triển khai các hằng số HAL, thì nên sử dụng Bước 2 để cập nhật các mẫu dự phòng được mô tả trong Bước 1 nhằm tạo ra các đầu ra tương tự. Ánh xạ được hỗ trợ bởi hai mô hình mặc định khác nhau.

  • Mô hình rời rạc (đơn giản)

    • Biên độ là biến chính của mô hình này. Mỗi thực thể trong HAL đại diện cho một biên độ haptic khác nhau.
    • Mô hình này là yêu cầu tối thiểu cần thiết để triển khai UX haptic cơ bản.
    • Một UX haptic tiên tiến hơn yêu cầu phần cứng tiên tiến và một mô hình tiên tiến (mô hình liên tục).
  • Mô hình liên tục (nâng cao)

    • Kết cấu và biên độ là các biến chính của mô hình này. Mỗi thực thể trong HAL đại diện cho các kết cấu xúc giác khác nhau. Biên độ của mỗi thực thể HAL được kiểm soát bởi hệ số tỷ lệ ( S ).
    • Mô hình này yêu cầu phần cứng tiên tiến. Nếu OEM muốn sử dụng trải nghiệm người dùng haptic nâng cao với VibrationEffect.Composition (để sử dụng tốt nhất các API haptics mới nhất), thì nên triển khai phần cứng của họ bằng mô hình này.

Mô hình rời rạc

Bạn nên ánh xạ tất cả các hằng số công khai được cung cấp trong API với các hằng số HAL thích hợp. Để bắt đầu quá trình này, hãy tìm xem có bao nhiêu dạng sóng xúc giác với biên độ rời rạc mà thiết bị có thể xác định trong HAL. Một câu hỏi cụ thể xoay quanh khái niệm đó có dạng như sau: Có bao nhiêu hiệu ứng xúc giác đơn với sự khác biệt về biên độ mà con người có thể cảm nhận được có thể được xác định trong điện thoại của tôi? Câu trả lời cho câu hỏi này xác định ánh xạ.

Xác định hằng số HAL là một quá trình phụ thuộc vào phần cứng. Ví dụ: một chiếc điện thoại cấp thấp có thể chỉ có khả năng phần cứng để tạo ra một dạng sóng xúc giác duy nhất. Các thiết bị có các thành phần phần cứng tiên tiến hơn tạo ra nhiều mức biên độ riêng biệt hơn và có thể xác định nhiều dạng sóng xúc giác trong HAL. Ánh xạ hằng số HAL-API lấy hằng số HAL (sử dụng biên độ trung bình làm đường cơ sở), sau đó sắp xếp các hiệu ứng mạnh hơn hoặc yếu hơn từ đó.

Sơ đồ phạm vi hằng số HAL và biên độ phản hồi

Hình 5. Dải hằng số HAL theo biên độ

Khi số lượng hằng số HAL với biên độ rời rạc được xác định, đã đến lúc ánh xạ hằng số HAL và API theo số lượng hằng số HAL. Quá trình ánh xạ này có thể phân đoạn một hằng số API xung đơn thành tối đa ba nhóm mức biên độ riêng biệt. Cách các hằng số API được phân đoạn dựa trên các nguyên tắc UX cho các sự kiện đầu vào đi kèm. Để biết thêm thông tin, hãy xem Thiết kế Haptics UX .

Mô hình rời rạc để ánh xạ hằng số HAL-API

Hình 6. Ánh xạ hằng số HAL-API: Mô hình rời rạc

Nếu thiết bị của bạn chỉ hỗ trợ hai hằng số HAL có biên độ riêng biệt, hãy cân nhắc hợp nhất các hằng số HAL ở mức biên độ Trung bình và Cao. Một ví dụ về khái niệm này trong thực tế sẽ là ánh xạ EFFECT_CLICKEFFECT_HEAVY_CLICK tới cùng một hằng số HAL, đó sẽ là hằng số HAL mức biên độ trung bình. Nếu thiết bị của bạn chỉ hỗ trợ một hằng số HAL với biên độ rời rạc, hãy cân nhắc hợp nhất cả ba mức thành một.

mô hình liên tục

Mô hình liên tục với khả năng mở rộng biên độ có thể được áp dụng để xác định hằng số HAL. Hệ số tỷ lệ ( S ) có thể được áp dụng cho các hằng số HAL (ví dụ: HAL_H0 , HAL_H1 ) để tạo ra HAL được chia tỷ lệ ( HAL_H0 x S ). Trong trường hợp này, HAL chia tỷ lệ được ánh xạ để xác định các hằng số API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) như trong hình 7. Bằng cách sử dụng khả năng mở rộng biên độ của mô hình liên tục, một thiết bị có thể lưu trữ một số lượng nhỏ các hằng số HAL với kết cấu đặc biệt và thêm các biến thể biên độ bằng cách điều chỉnh hệ số tỷ lệ ( S ). Các nhà sản xuất thiết bị có thể xác định số lượng hằng số HAL dựa trên số lượng kết cấu xúc giác khác nhau mà họ muốn cung cấp.

Phạm vi hằng số HAL theo kết cấu và biên độ

Hình 7. Dải hằng số HAL theo kết cấu (HAL_H0) và thang biên độ (S)

Mô hình liên tục để ánh xạ hằng số HAL-API

Hình 8. Ánh xạ hằng số HAL-API: Mô hình liên tục

Trong mô hình liên tục, các hằng số HAL khác nhau biểu thị các kết cấu xúc giác khác nhau thay vì các biên độ khác nhau; hệ số tỷ lệ ( S ) có thể định cấu hình biên độ. Tuy nhiên, do nhận thức về kết cấu (ví dụ: độ sắc nét) có liên quan đến nhận thức về thời lượng và biên độ, nên kết hợp kết cấu và hệ số tỷ lệ (trong quá trình thiết kế ánh xạ HAL-API).

Hình 7 minh họa ánh xạ hằng số bằng cách tăng biến thể từ một HAL thành nhiều hằng số API với khả năng mở rộng biên độ.

Tăng biến thể 1

Tăng biến thể 2

Hình 9. Tăng biến thiên với khả năng mở rộng biên độ

Lưu ý: Hình trên minh họa một trường hợp cụ thể của ánh xạ hằng số, vì vậy các quy ước đặt tên chỉ là giả thuyết. Thực hiện quá trình này là duy nhất cho mỗi nhà sản xuất thiết bị.

Đối với tất cả các hằng số API có thể thay đổi quy mô, chẳng hạn như PRIMITIVE_TICKPRIMITIVE_CLICK trong VibrationEffect.Composition , mức năng lượng của hằng số API phụ thuộc vào tham số float scale khi hằng số API được khai báo thông qua addPrimitive(int primitiveID, float scale, int delay) . PRIMITIVE_TICKPRIMITIVE_CLICK có thể được thiết kế với sự phân biệt rõ ràng bằng cách sử dụng các hằng số HAL khác nhau. Cách tiếp cận này được khuyến nghị nếu bạn muốn thêm biến thể vào kết cấu .

Bước 3: Đánh giá phần cứng

Đánh giá phần cứng liên quan đến việc xác định ba hiệu ứng xúc giác, được gắn nhãn Hiệu ứng 1, 2 và 3 cho đánh giá cụ thể này.

Hiệu ứng 1: Hằng số haptic ngắn được xác định trước

Hằng số VibrationEffect.EFFECT_CLICK là hiệu ứng cơ sở hoặc mẫu số chung trong ánh xạ HAL-API được cung cấp ở Bước 2. Nó được ánh xạ với hiệu ứng được sử dụng nhiều nhất, HapticFeedbackConstants.KEYBOARD_PRESS . Đánh giá hiệu ứng này giúp xác định mức độ sẵn sàng của thiết bị mục tiêu của bạn đối với xúc giác rõ ràng .

Hiệu ứng 2: Hiệu ứng xúc giác tùy chỉnh ngắn

Hằng số VibrationEffect.createOneShot(20,255) dành cho các hiệu ứng xúc giác tùy chỉnh. Đối với các xung tùy chỉnh ngắn, đơn lẻ, 20 mili giây là ngưỡng tối đa được đề xuất để xác định thời lượng. Một xung đơn dài hơn 20 mili giây không được khuyến nghị vì nó được coi là rung động ù ù .

Dạng sóng của hiệu ứng xúc giác tùy chỉnh ngắn

Hình 10. Hiệu ứng xúc giác tùy chỉnh ngắn

Hiệu ứng 3: Hiệu ứng xúc giác tùy chỉnh dài với sự thay đổi biên độ

Hằng số VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) dành cho các hiệu ứng tùy chỉnh dài với sự thay đổi biên độ. Khả năng tạo ra các biên độ khác nhau cho các hiệu ứng haptic tùy chỉnh là một trong những chỉ báo để đánh giá khả năng của thiết bị đối với các haptic phong phú . Thời timings []amplitudes [] được đề xuất lần lượt là {500, 500}{128, 255} , thể hiện xu hướng biên độ tăng dần từ 50% lên 100%, với tốc độ lấy mẫu 500 mili giây.

Dạng sóng hiệu ứng haptic với sự thay đổi biên độ

Hình 11. Hiệu ứng xúc giác tùy chỉnh dài với sự thay đổi biên độ

Để kiểm tra khả năng phần cứng của điều khiển biên độ cho Hiệu ứng 3, hãy sử dụng phương thức Vibrator.hasAmplitudeControl() . Kết quả phải true để thực thi VibrationEffect.createWaveform với biên độ thay đổi như dự kiến.

Lưu đồ đánh giá hiệu ứng haptic chủ quan

Hình 12. Đánh giá đối tượng về hiệu ứng haptic 1, 2 và 3

Thực hiện đánh giá chủ quan

Để kiểm tra tính nhất quán nhanh chóng, trước tiên hãy thực hiện đánh giá chủ quan. Mục tiêu của đánh giá chủ quan là quan sát biên độ của hiệu ứng xúc giác để xác định xem thiết bị có thể tạo ra xúc giác với biên độ mà con người có thể cảm nhận được hay không.

Một câu hỏi cụ thể xoay quanh khái niệm này có dạng như sau: Thiết bị có thể tạo ra các hiệu ứng xúc giác dễ nhận thấy cho người dùng như mong đợi không? Việc trả lời câu hỏi này sẽ giúp bạn tránh được các phản ứng xúc giác không thành công , bao gồm các phản ứng xúc giác không thể nhận thấy mà người dùng không thể cảm nhận được hoặc các phản ứng xúc giác ngoài ý muốn trong đó các dạng sóng không tạo ra các mẫu như dự định.