การใช้ Haptics

โดยทั่วไปผู้ผลิตอุปกรณ์จะถือว่าเป็นเจ้าของทรัพย์สินส่วนตัวที่สร้างขึ้นสำหรับแต่ละอุปกรณ์ ด้วยเหตุนี้ ความพยายามด้านวิศวกรรมของพวกเขาจึงมักจะเน้นที่ พื้นฐานต่ออุปกรณ์ แทบไม่ต้องใช้ความพยายามเลยในการทำให้อุปกรณ์อื่นๆ ในระบบนิเวศมีความสอดคล้องกัน

ในทางตรงกันข้าม นักพัฒนาพยายามสร้างแอปที่ทำงานบนโทรศัพท์ Android ทุก เครื่องในระบบนิเวศ โดยไม่คำนึงถึงข้อกำหนดทางเทคนิคของอุปกรณ์แต่ละเครื่อง ความแตกต่างในแนวทางนี้อาจทำให้เกิดปัญหาการแตกแฟรกเมนต์ ตัวอย่างเช่น ความสามารถของฮาร์ดแวร์ของโทรศัพท์บางรุ่นไม่ตรงกับความคาดหวังที่กำหนดโดยนักพัฒนาแอป ดังนั้นหากแฮปติค APIs ทำงานบนโทรศัพท์ Android บางรุ่นแต่ใช้ไม่ได้กับโทรศัพท์รุ่นอื่นๆ ผลลัพธ์ก็คือระบบนิเวศที่ไม่สอดคล้องกัน นี่คือเหตุผลที่การกำหนดค่าฮาร์ดแวร์มีบทบาทสำคัญในการทำให้มั่นใจว่าผู้ผลิตสามารถใช้ Android haptics API กับ ทุก อุปกรณ์ได้

หน้านี้แสดงรายการตรวจสอบทีละขั้นตอนเพื่อตั้งค่าการปฏิบัติตามข้อกำหนดของฮาร์ดแวร์เพื่อการใช้งาน Android haptics API ได้ดีที่สุด

รูปด้านล่างแสดงให้เห็นถึงการสร้างความรู้ทั่วไประหว่างผู้ผลิตอุปกรณ์และนักพัฒนา ซึ่งเป็นขั้นตอนสำคัญในการสร้างระบบนิเวศที่เหนียวแน่น

ไดอะแกรมของกรณีการใช้งานแบบสัมผัสสำหรับนักพัฒนาแอปและผู้ผลิตอุปกรณ์

รูปที่ 1. การสร้างความรู้ระหว่างผู้ผลิตอุปกรณ์และนักพัฒนา

รายการตรวจสอบการใช้งาน Haptics

  1. ใช้ค่าคงที่

    • รายการค่าคงที่ที่จะใช้แฮปติก
  2. แมปค่าคงที่ระหว่าง HAL และ API

  3. ประเมินฮาร์ดแวร์

    • คำแนะนำเกี่ยวกับเอฟเฟกต์สัมผัสเป้าหมาย ใช้คำแนะนำเหล่านี้เพื่อตรวจสอบฮาร์ดแวร์ของคุณอย่างรวดเร็ว

เราจะสำรวจแต่ละขั้นตอนเหล่านี้โดยละเอียดยิ่งขึ้นด้านล่าง

ขั้นตอนที่ 1: ใช้ค่าคงที่

ทำการตรวจสอบเหล่านี้เพื่อพิจารณาว่าอุปกรณ์ของคุณตรงตามข้อกำหนดขั้นต่ำในการติดตั้งระบบแฮปติกหรือไม่

ผังงานของกระบวนการใช้งานแฮบติค

รูปที่ 2 การนำเอฟเฟกต์ไปใช้

ผังงานของขั้นตอนสำหรับการดำเนินการเบื้องต้น

รูปที่ 3 การนำ primitives ไปใช้

ตรวจสอบสถานะการใช้งานของค่าคงที่แบบสัมผัสต่อไปนี้

ค่าคงที่แบบสัมผัส สถานที่และบทสรุป
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 ขอแนะนำให้อัปเดตการกำหนดค่าเหล่านี้เพื่อให้ทำงานได้ดีที่สุดบนอุปกรณ์ดังกล่าว

  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_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 class
ค่าคงที่แบบสัมผัสใน HapticFeedbackConstants ช่วยอินพุตเหตุการณ์ด้วยองค์ประกอบ UI บางอย่าง เช่น KEYBOARD_PRESS และ KEYBOARD_RELEASE ซึ่งเรียกใช้โดย performHapticFeedback()

ขั้นตอนที่ 2: จับคู่ค่าคงที่ระหว่าง HAL และ API

ขั้นตอนที่ 2 นำเสนอการแมปที่แนะนำระหว่างค่าคงที่ HAL สาธารณะและค่าคงที่ API หากฮาร์ดแวร์ที่ประเมินในขั้นตอนที่ 1 ไม่ได้ใช้ค่าคงที่ HAL ควรใช้ขั้นตอนที่ 2 เพื่ออัปเดตรูปแบบทางเลือกที่อธิบายไว้ในขั้นตอนที่ 1 เพื่อสร้างเอาต์พุตที่คล้ายกัน การทำแผนที่ได้รับความช่วยเหลือจากโมเดลเริ่มต้นสองแบบที่แตกต่างกัน

  • แบบแยกส่วน (แบบ ธรรมดา)

    • แอมพลิจูดเป็นตัวแปรสำคัญของโมเดลนี้ แต่ละเอนทิตีใน HAL แสดงถึงแอมพลิจูดของแฮปติกที่แตกต่างกัน
    • โมเดลนี้เป็นข้อกำหนดขั้นต่ำที่จำเป็นในการปรับใช้ UX แบบสัมผัสพื้นฐาน
    • UX แบบสัมผัสขั้นสูงต้องใช้ฮาร์ดแวร์ขั้นสูงและโมเดลขั้นสูง (รุ่นต่อเนื่อง)
  • รุ่นต่อเนื่อง (ขั้นสูง)

    • พื้นผิวและแอมพลิจูดเป็นตัวแปรสำคัญของโมเดลนี้ แต่ละเอนทิตีใน HAL แสดงถึงพื้นผิวสัมผัสที่แตกต่างกัน แอมพลิจูดของแต่ละเอนทิตี HAL ถูกควบคุมโดยตัวประกอบมาตราส่วน ( S )
    • รุ่นนี้ต้องใช้ฮาร์ดแวร์ขั้นสูง หาก OEM ต้องการใช้ UX แบบสัมผัสขั้นสูงที่มี VibrationEffect.Composition (เพื่อการใช้งานที่ดีที่สุดของ API แบบสัมผัสล่าสุด) ขอแนะนำให้ใช้ฮาร์ดแวร์ของตนโดยใช้โมเดลนี้

รุ่นแยก

แนะนำให้ทำการแมปค่าคงที่สาธารณะทั้งหมดที่ระบุใน API ด้วยค่าคงที่ HAL ที่เหมาะสม ในการเริ่มต้นกระบวนการนี้ ให้ค้นหาว่าอุปกรณ์สามารถกำหนดรูปคลื่นแบบแฮบติคที่มีแอมพลิจูดแบบไม่ต่อเนื่องได้กี่รูปใน HAL คำถามเฉพาะที่มีโครงสร้างเกี่ยวกับแนวคิดนั้นมีลักษณะดังนี้: โทรศัพท์ของฉันสามารถกำหนดเอฟเฟกต์แบบสัมผัสแรงกระตุ้นเดียวที่มีความแตกต่างของแอมพลิจูดที่มนุษย์เข้าใจได้กี่แบบ คำตอบสำหรับคำถามนี้จะกำหนดการทำแผนที่

การกำหนดค่าคงที่ HAL เป็นกระบวนการที่ขึ้นกับฮาร์ดแวร์ ตัวอย่างเช่น โทรศัพท์ระดับเริ่มต้นอาจมีเพียงความสามารถของฮาร์ดแวร์ในการสร้างรูปคลื่นแฮบติคเดียวเท่านั้น อุปกรณ์ที่มีส่วนประกอบฮาร์ดแวร์ขั้นสูงจะสร้างระดับแอมพลิจูดแบบไม่ต่อเนื่องได้หลากหลายขึ้น และสามารถกำหนดรูปคลื่นแบบสัมผัสได้หลายแบบใน HAL การแมปค่าคงที่ HAL-API ใช้ค่าคงที่ HAL (โดยใช้แอมพลิจูดกลางเป็นเส้นฐาน) จากนั้นจึงจัดเรียงเอฟเฟกต์ที่แข็งแกร่งกว่าหรืออ่อนกว่าจากที่นั่น

ไดอะแกรมของช่วงค่าคงที่ HAL และแอมพลิจูดป้อนกลับ

รูปที่ 5. ช่วงค่าคงที่ HAL โดยแอมพลิจูด

เมื่อมีการกำหนดจำนวนค่าคงที่ HAL ที่มีแอมพลิจูดแบบไม่ต่อเนื่อง ถึงเวลาที่จะจับคู่ค่าคงที่ HAL และ API ด้วยจำนวนค่าคงที่ HAL กระบวนการทำแผนที่นี้สามารถแบ่งกลุ่มค่าคงที่ API ของแรงกระตุ้นเดี่ยวออกเป็นระดับแอมพลิจูดสูงสุดสามกลุ่ม วิธีแบ่งกลุ่มค่าคงที่ API ขึ้นอยู่กับหลักการ UX สำหรับเหตุการณ์อินพุตที่มาพร้อมกับ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ Haptics UX Design

โมเดลแบบไม่ต่อเนื่องสำหรับการแมปค่าคงที่ HAL-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 ตามจำนวนพื้นผิวสัมผัสต่างๆ ที่ต้องการให้

ช่วงค่าคงที่ HAL ตามพื้นผิวและแอมพลิจูด

รูปที่ 7 ช่วงคงที่ HAL ตามพื้นผิว (HAL_H0) และมาตราส่วนแอมพลิจูด (S)

โมเดลต่อเนื่องสำหรับการแมปค่าคงที่ HAL-API

รูปที่ 8 การแมปค่าคงที่ HAL-API: โมเดลต่อเนื่อง

ในแบบจำลองต่อเนื่อง ค่าคงที่ HAL ที่แตกต่างกันแสดงถึง พื้นผิว สัมผัสที่ต่างกันมากกว่าแอมพลิจูดที่ต่างกัน ตัวคูณมาตราส่วน ( S ) สามารถกำหนดค่าแอมพลิจูดได้ อย่างไรก็ตาม เนื่องจากการรับรู้ของพื้นผิว (เช่น ความคมชัด) เกี่ยวข้องกับการรับรู้ของระยะเวลาและแอมพลิจูด ขอแนะนำให้รวมพื้นผิวและปัจจัยมาตราส่วน (ในกระบวนการออกแบบการทำแผนที่ HAL-API)

รูปที่ 7 แสดงการทำแผนที่คงที่โดยเพิ่มความผันแปรจากค่าคงที่ HAL หนึ่งค่าไปเป็นค่าคงที่ API จำนวนมากพร้อมความสามารถในการขยายขนาดแอมพลิจูด

การเปลี่ยนแปลงที่เพิ่มขึ้น 1

การเปลี่ยนแปลงที่เพิ่มขึ้น2

รูปที่ 9 การเปลี่ยนแปลงที่เพิ่มขึ้นด้วยความสามารถในการขยายขนาดแอมพลิจูด

หมายเหตุ: รูปด้านบนแสดงตัวอย่างเฉพาะของการแมปคงที่ ดังนั้นรูปแบบการตั้งชื่อจึงเป็นการสมมุติ การดำเนินการตามขั้นตอนนี้จะไม่ซ้ำกันสำหรับผู้ผลิตอุปกรณ์แต่ละราย

สำหรับค่าคงที่ API ที่ปรับขนาดได้ทั้งหมด เช่น PRIMITIVE_TICK และ PRIMITIVE_CLICK ใน VibrationEffect.Composition ระดับพลังงานของค่าคงที่ API จะขึ้นอยู่กับพารามิเตอร์ของ float scale เมื่อค่าคงที่ API ถูกประกาศผ่าน addPrimitive(int primitiveID, float scale, int delay) PRIMITIVE_TICK และ PRIMITIVE_CLICK สามารถออกแบบให้มีความแตกต่างที่ชัดเจนโดยใช้ค่าคงที่ HAL ที่แตกต่างกัน วิธีนี้แนะนำหากคุณต้องการเพิ่มรูปแบบให้กับ พื้นผิว

ขั้นตอนที่ 3: ประเมินฮาร์ดแวร์

การประเมินฮาร์ดแวร์เกี่ยวข้องกับการกำหนดเอฟเฟกต์แบบสัมผัสสามแบบ มีป้ายกำกับว่าเอฟเฟกต์ 1, 2 และ 3 สำหรับการประเมินเฉพาะนี้

ผลกระทบ 1: ค่าคงที่แบบสัมผัสสั้นที่กำหนดไว้ล่วงหน้า

ค่าคงที่ VibrationEffect.EFFECT_CLICK คือเอฟเฟกต์พื้นฐานหรือตัวหารร่วมในการแมป HAL-API ที่ให้ไว้ในขั้นตอนที่ 2 ซึ่งจับคู่กับเอฟเฟกต์ที่ใช้มากที่สุด 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

ดำเนินการประเมินอัตนัย

สำหรับการตรวจสอบความสอดคล้องกันอย่างรวดเร็ว ให้ดำเนินการประเมินเชิงอัตนัยก่อน เป้าหมายของการประเมินตามอัตวิสัยคือการสังเกตแอมพลิจูดของเอฟเฟกต์สัมผัสเพื่อพิจารณาว่าอุปกรณ์สามารถสร้างการสั่นด้วยแอมพลิจูดที่มนุษย์รับรู้ได้หรือไม่

คำถามเฉพาะที่มีโครงสร้างเกี่ยวกับแนวคิดนี้มีลักษณะดังนี้: อุปกรณ์สามารถสร้างเอฟเฟกต์สัมผัสที่มองเห็นได้ง่ายต่อผู้ใช้ตามที่คาดไว้หรือไม่ การตอบคำถามนี้ช่วยให้คุณหลีกเลี่ยงระบบสัมผัสที่ ล้มเหลว รวมถึงการสั่นแบบมองไม่เห็นที่ผู้ใช้รู้สึกไม่ได้ หรือการสั่นแบบไม่ได้ตั้งใจซึ่งรูปคลื่นไม่ได้สร้างรูปแบบตามที่ตั้งใจไว้