การนำ Haptics มาใช้

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

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

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

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

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

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

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

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

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

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

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

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

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

  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
ค่าคงที่ของการสัมผัสใน 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

โมเดลแยกสำหรับการทำแผนที่คงที่ 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

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

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

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