โดยทั่วไปแล้ว ผู้ผลิตอุปกรณ์จะถือเป็นเจ้าของเนื้อหาส่วนตัวที่สร้างขึ้นสำหรับอุปกรณ์แต่ละเครื่อง ด้วยเหตุนี้ งานด้านวิศวกรรมของบริษัทจึงมักมุ่งเน้นแบบรายอุปกรณ์ แทบจะไม่ต้องดำเนินการใดๆ เลยกับความสอดคล้องของอุปกรณ์อื่นๆ ในระบบนิเวศ
ในทางตรงกันข้าม นักพัฒนาแอปพยายามสร้างแอปที่ใช้งานได้ในทุกโทรศัพท์ Android ในระบบนิเวศ โดยไม่คำนึงถึงข้อกำหนดทางเทคนิคของอุปกรณ์แต่ละเครื่อง ความแตกต่างของแนวทางนี้อาจทำให้เกิดปัญหาการแยกส่วน เช่น ความสามารถของฮาร์ดแวร์ของโทรศัพท์บางรุ่นไม่ตรงกับที่นักพัฒนาแอปคาดหวัง ดังนั้น หาก API ของการสัมผัสทำงานในโทรศัพท์ Android บางรุ่นแต่ไม่ทำงานในบางรุ่น ระบบนิเวศก็จะไม่สอดคล้องกัน ด้วยเหตุนี้ การกําหนดค่าฮาร์ดแวร์จึงมีบทบาทสําคัญในการช่วยให้ผู้ผลิตสามารถใช้ Android Haptics API ในอุปกรณ์ทุกเครื่อง
หน้านี้มีรายการตรวจสอบแบบทีละขั้นตอนเพื่อตั้งค่าการปฏิบัติตามข้อกำหนดด้านฮาร์ดแวร์เพื่อให้ใช้ Android Haptics API ได้อย่างมีประสิทธิภาพสูงสุด
ภาพด้านล่างแสดงการสร้างความรู้ทั่วไประหว่างผู้ผลิตอุปกรณ์และนักพัฒนาซอฟต์แวร์ ซึ่งเป็นขั้นตอนสำคัญในการสร้างระบบนิเวศที่เกี่ยวเนื่องกัน
รูปที่ 1 การสร้างความรู้ระหว่างผู้ผลิตอุปกรณ์และนักพัฒนาแอป
รายการตรวจสอบการใช้งานการโต้ตอบการสัมผัส
-
- รายการค่าคงที่ที่ต้องการใช้การโต้ตอบการสัมผัส
แมปค่าคงที่ระหว่าง HAL กับ API
- คําแนะนําในการแมประหว่างค่าคงที่ของ API สาธารณะ (ชื่อเป็นตัวยึดตําแหน่งในเฟรมเวิร์ก) กับค่าคงที่ HAL ซึ่งใช้ตัวยึดตําแหน่ง
- ดูข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนนี้ได้ที่หลักการในการออกแบบเพื่อเป็นแนวทางในการแมปที่แนะนำ
-
- วิธีการเกี่ยวกับเอฟเฟกต์การสัมผัสเป้าหมาย ใช้วิธีการเหล่านี้เพื่อตรวจสอบฮาร์ดแวร์อย่างรวดเร็ว
เราจะสำรวจแต่ละขั้นตอนเหล่านี้ด้วยรายละเอียดเพิ่มเติมด้านล่าง
ขั้นตอนที่ 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
เราขอแนะนำให้อัปเดตการกำหนดค่าเหล่านี้เพื่อให้ทำงานได้ดีที่สุดบนอุปกรณ์ดังกล่าว
EFFECT_CLICK
การสั่นรูปแบบคลื่นที่สร้างด้วย
VibrationEffect.createWaveform
และการกำหนดเวลาที่กำหนดค่าไว้ที่frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
EFFECT_HEAVY_CLICK
การสั่นรูปแบบคลื่นที่สร้างด้วย
VibrationEffect.createWaveform
และการกำหนดเวลาที่กำหนดค่าไว้ที่frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern
EFFECT_DOUBLE_CLICK
การสั่นรูปแบบคลื่นที่สร้างด้วย
VibrationEffect.createWaveform
และเวลา (0, 30, 100, 30)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 สัมผัสล่าสุดอย่างเต็มประสิทธิภาพ) เราขอแนะนำให้ติดตั้งใช้งานฮาร์ดแวร์โดยใช้รูปแบบนี้
- พื้นผิวและความกว้างเป็นตัวแปรหลักของโมเดลนี้
เอนทิตีแต่ละรายการใน HAL แสดงถึงพื้นผิวระบบสัมผัสที่แตกต่างกัน แอมพลิจูดของเอนทิตี HAL แต่ละรายการจะควบคุมโดยค่าตัวคูณมาตราส่วน (
โมเดลแบบไม่ต่อเนื่อง
เราขอแนะนําให้แมปค่าคงที่สาธารณะทั้งหมดที่ระบุไว้ใน API กับค่าคงที่ HAL ที่เหมาะสม ในการเริ่มต้นกระบวนการนี้ ให้ดูว่าอุปกรณ์กำหนดรูปแบบการสั่นที่มีแอมพลิจูดแบบไม่ต่อเนื่องได้กี่รูปแบบใน HAL คำถามที่เจาะจงซึ่งโครงสร้างเกี่ยวกับแนวคิดดังกล่าวมีลักษณะดังนี้ คุณจะกำหนดผลกระทบแบบรู้สึกได้แบบแรงกระตุ้นเดียวซึ่งมีความแตกต่างของแอมพลิจูดที่มนุษย์รับรู้ได้ในโทรศัพท์กี่ครั้ง คำตอบสำหรับคำถามนี้จะเป็นตัวกำหนดการแมป
การกําหนดค่าคงที่ HAL เป็นกระบวนการที่ขึ้นอยู่กับฮาร์ดแวร์ ตัวอย่างเช่น โทรศัพท์ระดับเริ่มต้นอาจมีเพียงความสามารถของฮาร์ดแวร์ในการสร้างรูปแบบการสัมผัสแบบเดียว อุปกรณ์ที่มีคอมโพเนนต์ฮาร์ดแวร์ขั้นสูงจะสร้างระดับแอมพลิจูดแบบไม่ต่อเนื่องได้กว้างขึ้น และกำหนดรูปแบบการสั่นหลายรูปแบบใน HAL ได้ การแมปค่าคงที่ HAL-API จะใช้ค่าคงที่ HAL (โดยใช้ความกว้างของสัญญาณเป็นฐาน) จากนั้นจัดเรียงเอฟเฟกต์ที่แรงขึ้นหรืออ่อนลงจากค่านั้น
รูปที่ 5 ช่วงคงที่ HAL ตามแอมพลิจูด
เมื่อกำหนดจำนวนค่าคงที่ HAL ที่มีแอมพลิจูดแบบไม่ต่อเนื่องแล้ว ก็ถึงเวลาจับคู่ค่าคงที่ HAL และ API ตามจำนวนค่าคงที่ HAL กระบวนการแมปนี้สามารถแบ่งกลุ่มค่าคงที่ API แบบอิมพัลส์รายการเดียวออกเป็นกลุ่มระดับแอมพลิจูดแบบแยกต่างหากได้สูงสุด 3 กลุ่ม วิธีแบ่งกลุ่มค่าคงที่ API นั้นอิงตามหลักการ UX สำหรับเหตุการณ์อินพุตประกอบ ดูข้อมูลเพิ่มเติมได้ที่การออกแบบประสบการณ์ของผู้ใช้ Haaptics
รูปที่ 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 ตามจำนวนพื้นผิวสัมผัสที่แตกต่างกันที่ต้องการนำเสนอ
รูปที่ 7 ช่วงคงที่ HAL ตามพื้นผิว (HAL_H0) และสเกลแอมพลิจูด (S)
รูปที่ 8 การแมป HAL-API แบบคงที่: โมเดลแบบต่อเนื่อง
ในโมเดลแบบต่อเนื่อง ค่าคงที่ HAL ที่แตกต่างกันจะแสดงพื้นผิวสัมผัสที่แตกต่างกัน ไม่ใช่ความกว้างของสัญญาณที่แตกต่างกัน ปัจจัยการขยาย (S
) สามารถกำหนดค่าความกว้างของสัญญาณได้ อย่างไรก็ตาม เนื่องจากการรับรู้พื้นผิว (เช่น ความคมชัด) เกี่ยวข้องกับการรับรู้ระยะเวลาและความกว้าง เราจึงขอแนะนำให้รวมพื้นผิวและปัจจัยการขยาย (ในกระบวนการออกแบบการแมป HAL-API)
รูปที่ 7 แสดงการแมปค่าคงที่โดยการเพิ่มความหลากหลายจาก HAL 1 รายการเป็นค่าคงที่ API หลายรายการที่มีความยืดหยุ่นตามระดับความดัง
รูปที่ 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
ประเมินแบบอัตวิสัย
หากต้องการตรวจสอบความสอดคล้องอย่างรวดเร็ว ให้ทำการประเมินโดยอัตนัยก่อน เป้าหมายของการประเมินแบบอัตนัยคือสังเกตแอมพลิจูดของเอฟเฟกต์การสัมผัสเพื่อพิจารณาว่าอุปกรณ์สามารถสร้างการสัมผัสที่มีแอมพลิจูดที่มนุษย์รับรู้ได้หรือไม่
คำถามที่เฉพาะเจาะจงซึ่งจัดโครงสร้างตามแนวคิดนี้มีลักษณะดังนี้ อุปกรณ์สร้างผลสัมผัสที่ผู้ใช้รับรู้ได้ตามที่คาดไว้ได้ไหม การตอบคำถามนี้จะช่วยให้คุณหลีกเลี่ยงการโต้ตอบการสัมผัสที่ล้มเหลว รวมถึงการโต้ตอบการสัมผัสที่ผู้ใช้ไม่อาจสัมผัสได้ หรือการโต้ตอบการสัมผัสโดยไม่ได้ตั้งใจที่รูปแบบคลื่นไม่สร้างรูปแบบตามที่คาดไว้
ทำการประเมินขั้นสูง
ขอแนะนําอย่างยิ่งให้ทําการประเมินคุณภาพขั้นสูง การประเมินคุณภาพขั้นสูงจะระบุแอตทริบิวต์ที่วัดผลได้ของเอฟเฟกต์การสัมผัสเพื่อใช้การสัมผัสที่มีคุณภาพ เมื่อเสร็จสิ้น ผู้ผลิตอุปกรณ์ควรจะสามารถวินิจฉัยสถานะการสัมผัสปัจจุบัน ซึ่งหมายความว่าสามารถตั้งเป้าหมายเพื่อปรับปรุงคุณภาพโดยรวมได้ ดูการประเมินฮาร์ดแวร์