ใช้งานระบบสัมผัส

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

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

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

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

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

รูปที่ 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 คลาสองค์ประกอบ
ค่าคงที่ Haptic ใน 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
ค่าคงที่ Haptic ใน 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 กระบวนการแมปนี้สามารถแบ่งส่วนคงที่ของ Impulse 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 ms

รูปคลื่นเอฟเฟกต์แบบสัมผัสพร้อมการเปลี่ยนแปลงแอมพลิจูด

รูปที่ 11 เอฟเฟกต์ระบบสัมผัสแบบกำหนดเองแบบยาวพร้อมการเปลี่ยนแปลงแอมพลิจูด

หากต้องการตรวจสอบความสามารถด้านฮาร์ดแวร์ของการควบคุมแอมพลิจูดสำหรับเอฟเฟกต์ 3 ให้ใช้เมธอด Vibrator.hasAmplitudeControl() ผลลัพธ์จะต้องเป็น true จึงจะสามารถรัน VibrationEffect.createWaveform ด้วยแอมพลิจูดที่แตกต่างกันตามที่ตั้งใจไว้

ผังงานการประเมินเอฟเฟกต์สัมผัสแบบอัตนัย

รูปที่ 12 การประเมินเป้าหมายของเอฟเฟกต์ระบบสัมผัส 1, 2 และ 3

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

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

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