ข้อมูลอ้างอิง API ของการสัมผัสของ Android

ส่วนนี้จะแนะนำ API การสัมผัสต่างๆ ที่มีให้ใช้งานใน Android รวมถึงกล่าวถึงเวลาและวิธีตรวจสอบการรองรับอุปกรณ์ที่จำเป็นเพื่อให้แน่ใจว่าเอฟเฟกต์การสัมผัสจะเล่นตามที่คุณต้องการ

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

  • ความพร้อมใช้งานมีความสําคัญอย่างยิ่งเมื่อวางแผนการรองรับลักษณะการทํางานสำรอง และจะต้องควบคู่ไปกับการตรวจสอบการรองรับอุปกรณ์แต่ละรุ่น
  • การสัมผัสที่ชัดเจนคือความรู้สึกที่คมชัดและสะอาดตาซึ่งทำให้ผู้ใช้รู้สึกไม่กระวนกระวาย
  • การสัมผัสที่สมจริงจะแสดงออกได้ดีกว่าและมักต้องใช้ฮาร์ดแวร์ที่มีคุณสมบัติหลากหลายมากขึ้น
แพลตฟอร์ม API ความพร้อมใช้งาน สัมผัสที่ชัดเจน การโต้ตอบการสัมผัสที่หลากหลาย
HapticFeedbackConstants Android 1.5 ขึ้นไป
(ตามค่าคงที่)
VibrationEffect ที่กําหนดไว้ล่วงหน้า Android 10 ขึ้นไป
VibrationEffect Composition Android 11 ขึ้นไป (ตามค่าคงที่)
การสั่นเปิด/ปิด การสั่นแบบครั้งเดียว และการสั่นตามรูปแบบคลื่น Android 1

นอกจากนี้ Notification API ที่อธิบายไว้ในหน้านี้ยังช่วยให้คุณปรับแต่งเอฟเฟกต์การสัมผัสที่เล่นสําหรับการแจ้งเตือนที่เข้ามาได้ด้วย

หน้านี้ยังอธิบายแนวคิดเพิ่มเติมที่ครอบคลุมแพลตฟอร์ม API ด้วย

  • อุปกรณ์มีไวเบรเตอร์ไหม
  • การควบคุมระดับช่วยให้สัมผัสได้นุ่มนวลและสมจริงยิ่งขึ้น แต่อุปกรณ์บางรุ่นอาจไม่รองรับ
  • VibrationAttributes() ช่วยคุณจัดหมวดหมู่การสั่นตามการใช้งาน เพื่อให้มั่นใจว่าการตั้งค่าที่เหมาะสมของผู้ใช้จะมีผลกับการสั่นดังกล่าว และหลีกเลี่ยงไม่ให้ผู้ใช้ประหลาดใจ

HapticFeedbackConstants

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

ความเข้ากันได้และข้อกำหนด

การใช้เมธอด View.performHapticFeedback กับค่าคงที่เหล่านี้ไม่จําเป็นต้องได้รับสิทธิ์พิเศษสําหรับแอป แต่จะขึ้นอยู่กับพร็อพเพอร์ตี้ View.hapticFeedbackEnabled ซึ่งหากตั้งค่าเป็น false จะปิดใช้การเรียกใช้การตอบสนองการสัมผัสทั้งหมดในมุมมอง รวมถึงการเรียกใช้เริ่มต้นด้วย การตั้งค่าหลักที่เกี่ยวข้องคือพร็อพเพอร์ตี้ View.hapticFeedbackEnabled ซึ่งหากตั้งค่าเป็น false จะปิดใช้การเรียกใช้การตอบสนองการสัมผัสทั้งหมดในมุมมอง รวมถึงการเรียกใช้เริ่มต้นด้วย นอกจากนี้ วิธีการนี้ยังใช้การตั้งค่าระบบของผู้ใช้เพื่อเปิดใช้การตอบสนองต่อการสัมผัสด้วย

สิ่งที่ต้องพิจารณาเรื่องความเข้ากันได้เพียงอย่างเดียวคือระดับ SDK ของค่าคงที่ที่เฉพาะเจาะจงสําหรับการดําเนินการ

คุณไม่จำเป็นต้องระบุลักษณะการทำงานสำรองเมื่อใช้ HapticFeedbackConstants

การใช้งาน HapticsFeedbackConstants

โปรดดูรายละเอียดเกี่ยวกับการใช้ HapticFeedbackConstants ที่หัวข้อเพิ่มการสัมผัสที่ไวต่อการสัมผัสให้กับเหตุการณ์

ที่กำหนดไว้ล่วงหน้า VibrationEffect

คลาส VibrationEffect มีค่าคงที่ที่กําหนดไว้ล่วงหน้าหลายรายการ เช่น CLICK, TICK และ DOUBLE_CLICK อุปกรณ์อาจเพิ่มประสิทธิภาพเอฟเฟกต์เหล่านี้

ความเข้ากันได้และข้อกำหนด

การเล่น VibrationEffect ใดๆ ก็ตามต้องใช้สิทธิ์ VIBRATE ในไฟล์ Manifest ของแอป

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

API Vibrator.areEffectsSupported และ Vibrator.areAllEffectsSupported มีไว้เพื่อระบุว่ามีการใช้งานที่เพิ่มประสิทธิภาพสำหรับอุปกรณ์หรือไม่ คุณยังคงใช้เอฟเฟกต์ที่กําหนดไว้ล่วงหน้าได้โดยไม่ต้องมีการใช้งานแบบเพิ่มประสิทธิภาพ และใช้เอฟเฟกต์สำรองของแพลตฟอร์มมาตรฐาน ดังนั้น คุณจึงต้องใช้areEffectsSupported API เหล่านี้ก็ต่อเมื่อแอปพลิเคชันต้องการพิจารณาว่าเอฟเฟกต์ได้รับการเพิ่มประสิทธิภาพสำหรับอุปกรณ์หรือไม่

วิธีการตรวจสอบผลลัพธ์จะแสดงผลลัพธ์ค่าใดค่าหนึ่งต่อไปนี้

  • VIBRATION_EFFECT_SUPPORT_YES บ่งชี้ว่าอุปกรณ์รองรับเอฟเฟกต์นี้อย่างมีประสิทธิภาพ
  • VIBRATION_EFFECT_SUPPORT_NO บ่งชี้ว่าอุปกรณ์ไม่มีการสนับสนุนแบบเพิ่มประสิทธิภาพ แต่ยังคงใช้แพลตฟอร์มสำรอง
  • VIBRATION_EFFECT_SUPPORT_UNKNOWN บ่งบอกว่าระบบไม่ทราบว่าการใช้งานได้รับการเพิ่มประสิทธิภาพหรือไม่

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

การใช้ VibrationEffect ที่กําหนดไว้ล่วงหน้า

โปรดดูรายละเอียดเกี่ยวกับการใช้ VibrationEffect ที่กําหนดไว้ล่วงหน้าที่หัวข้อใช้ VibrationEffect ที่กําหนดไว้ล่วงหน้าเพื่อสร้างการตอบกลับด้วยระบบสัมผัส

VibrationEffect การเรียบเรียงเพลง

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

ความเข้ากันได้และข้อกำหนด

การเล่น VibrationEffect ใดๆ ก็ตามต้องใช้สิทธิ์ VIBRATE ในไฟล์ Manifest ของแอป

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

ตรวจสอบการรองรับรูปแบบการสั่น

คุณสามารถเรียกข้อมูลการสนับสนุนต่อองค์ประกอบพื้นฐานได้โดยใช้เมธอด Vibrator.arePrimitivesSupported หรือจะตรวจสอบชุดของพรอมต์พร้อมกันโดยใช้เมธอด Vibrator.areAllPrimitivesSupported ก็ได้ ซึ่งเทียบเท่ากับการ AND การรองรับต่อพรอมต์

การใช้ผลงานประพันธ์ VibrationEffect รายการ

โปรดดูรายละเอียดเกี่ยวกับการใช้การประพันธ์ VibrationEffect ที่หัวข้อสร้างการประพันธ์การสั่น

การสั่นแบบเปิด/ปิด การสั่นแบบครั้งเดียว และการสั่นแบบรูปคลื่น

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

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

รูปแบบแบบครั้งเดียวหมายถึงการสั่น 1 ครั้งเป็นเวลา N มิลลิวินาที

รูปแบบรูปแบบคลื่นมี 2 ประเภทดังนี้

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

ความเข้ากันได้และข้อกำหนด

การสั่นแบบเปิด/ปิดเป็นรูปแบบการสั่นที่เก่าแก่ที่สุด อุปกรณ์เกือบทุกเครื่องที่มีตัวสั่นจึงรองรับการสั่นรูปแบบนี้ ตามที่อธิบายไว้ภายหลังในหน้านี้

การเล่นการเรียกใช้ VibrationEffect หรือ vibrate แบบเก่าต้องใช้สิทธิ์ VIBRATE ในไฟล์ Manifest ของแอป

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

ตรวจสอบการรองรับการควบคุมแอมพลิจูด

ระบบจะปัดค่าแอมพลิจูดที่ไม่ใช่ 0 เป็น 100% ในอุปกรณ์ที่ไม่มีการควบคุมแอมพลิจูด ดังนั้นจึงควรตรวจสอบว่าอุปกรณ์รองรับหรือไม่โดยใช้ Vibrator.hasAmplitudeControl ดูรายละเอียดเพิ่มเติมได้ที่การควบคุมแอมพลิจูด

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

การใช้การสั่นแบบเปิด/ปิด

ใน SDK ระดับใหม่ ระบบได้รวมโหมดการสั่นทั้งหมดไว้ในคลาส VibrationEffect ที่สื่อความหมายแบบเดี่ยว ซึ่งจะสร้างการสั่นแบบง่ายเหล่านี้โดยใช้ VibrationEffect.createOneshot หรือ VibrationEffect.createWaveform

Notification API

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

รูปแบบทั้งหมดเหล่านี้ใช้รูปแบบคลื่นเปิด/ปิดพื้นฐานตามที่อธิบายไว้ก่อนหน้านี้ โดยรายการแรกคือเวลาหน่วงก่อนเปิดเครื่องสั่น

แนวคิดทั่วไป

แนวคิดหลายอย่างมีผลกับแพลตฟอร์ม API ที่ระบุไว้ข้างต้น

อุปกรณ์มีการสั่นไหม

คุณจะได้รับคลาส Vibrator ที่ไม่ใช่ค่า Null จาก context.getSystemService(Vibrator.class) หากอุปกรณ์ไม่มีมอเตอร์สั่น การเรียก API การสั่นจะไม่มีผลใดๆ ดังนั้นแอปจึงไม่จำเป็นต้องกำหนดเงื่อนไขให้กับการสัมผัสทั้งหมด อย่างไรก็ตาม หากจําเป็น แอปพลิเคชันสามารถเรียก hasVibrator() เพื่อระบุว่านี่เป็นไวเบรเตอร์จริง (true) หรือสแต็บ (false)

ผู้ใช้ปิดใช้การสัมผัสแบบสัมผัสไว้ไหม

การติดตั้งใช้งานที่กําหนดเองบางอย่างอาจต้องตรวจสอบด้วยตนเองว่าผู้ใช้ปิดการตั้งค่าการตอบสนองต่อการสัมผัสของ Android ทั้งหมดหรือไม่ ซึ่งในกรณีนี้ควรระงับเอฟเฟกต์การตอบสนองต่อการสัมผัส การตั้งค่านี้สามารถค้นหาได้โดยใช้คีย์ HAPTIC_FEEDBACK_ENABLED โดยค่า 0 หมายถึงปิดใช้

แอตทริบิวต์การสั่น

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

การสร้าง AudioAttributes อยู่ในเอกสารประกอบของคลาส และควรคิดว่าเป็นการสั่นแทนเสียง

เพื่อเป็นแนวทาง ในกรณีส่วนใหญ่ ประเภทเนื้อหาคือ CONTENT_TYPE_SONIFICATION และการใช้งานอาจเป็นค่าต่างๆ เช่น USAGE_ASSISTANCE_SONIFICATION สําหรับการตอบกลับการสัมผัสในเบื้องหน้า หรือ USAGE_ALARM สําหรับการปลุกในเบื้องหลัง การตั้งค่าเสียงจะไม่มีผลต่อการสั่น

การควบคุมแอมพลิจูด

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

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