ใช้การโต้ตอบการสัมผัส

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

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

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

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

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

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

รายการตรวจสอบการใช้งานการโต้ตอบการสัมผัส

  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 เพื่อสร้างเอาต์พุตที่คล้ายกัน การแมปได้รับความช่วยเหลือจากโมเดลเริ่มต้น 2 รูปแบบ

  • รูปแบบไม่ต่อเนื่อง (แบบง่าย)

    • Amplitude คือตัวแปรหลักของรูปแบบนี้ เอนทิตีแต่ละรายการใน 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 แบบอิมพัลส์รายการเดียวออกเป็นกลุ่มระดับแอมพลิจูดแบบแยกต่างหากได้สูงสุด 3 กลุ่ม วิธีแบ่งกลุ่มค่าคงที่ API นั้นอิงตามหลักการ UX สำหรับเหตุการณ์อินพุตประกอบ ดูข้อมูลเพิ่มเติมได้ที่การออกแบบประสบการณ์ของผู้ใช้ Haaptics

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

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

หากอุปกรณ์รองรับค่าคงที่ HAL เพียง 2 ค่าที่มีแอมพลิจูดแบบไม่ต่อเนื่อง ให้พิจารณาผสานค่าคงที่ HAL ระดับแอมพลิจูดปานกลางและสูง ตัวอย่างแนวคิดนี้ในทางปฏิบัติคือการแมป EFFECT_CLICK และ EFFECT_HEAVY_CLICK กับค่าคงที่ HAL เดียวกัน ซึ่งจะเป็นค่าคงที่ HAL ระดับความกว้างของคลื่นปานกลาง หากอุปกรณ์รองรับค่าคงที่ HAL รายการเดียวที่มีระดับความกว้างของคลื่นแบบไม่ต่อเนื่อง ให้พิจารณารวมระดับทั้ง 3 ระดับเข้าด้วยกัน

รูปแบบต่อเนื่อง

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

การประเมินฮาร์ดแวร์เกี่ยวข้องกับการกำหนดเอฟเฟกต์การสัมผัส 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

ประเมินแบบอัตวิสัย

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

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

ทำการประเมินขั้นสูง

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