Android รองรับหน้าจอสัมผัสและทัชแพดที่หลากหลาย รวมถึงแท็บเล็ตดิจิไทเซอร์ที่ใช้สไตลัส
หน้าจอสัมผัส คืออุปกรณ์สัมผัสที่เชื่อมโยงกับจอแสดงผล โดยที่ผู้ใช้รู้สึกเหมือนกำลังจัดการรายการต่างๆ บนหน้าจอโดยตรง
ทัชแพด คืออุปกรณ์สัมผัสที่ไม่เกี่ยวข้องกับจอแสดงผล เช่น แท็บเล็ตดิจิไทเซอร์ โดยทั่วไปทัชแพดจะใช้สำหรับการชี้หรือสำหรับตำแหน่งทางอ้อมหรือการควบคุมอินเทอร์เฟซผู้ใช้โดยใช้ท่าทาง
อุปกรณ์ระบบสัมผัสสามารถมีปุ่มที่มีฟังก์ชั่นคล้ายกับปุ่มเมาส์ได้
บางครั้งอุปกรณ์สัมผัสสามารถจัดการได้โดยใช้เครื่องมือต่างๆ มากมาย เช่น นิ้วหรือสไตลัส ทั้งนี้ขึ้นอยู่กับเทคโนโลยีเซ็นเซอร์สัมผัสที่ซ่อนอยู่
บางครั้งมีการใช้อุปกรณ์สัมผัสเพื่อใช้คีย์เสมือน ตัวอย่างเช่น ในอุปกรณ์ Android บางรุ่น พื้นที่เซ็นเซอร์หน้าจอสัมผัสจะขยายเกินขอบของจอแสดงผล และทำหน้าที่สองวัตถุประสงค์โดยเป็นส่วนหนึ่งของแผงปุ่มกดที่ไวต่อการสัมผัส
เนื่องจากอุปกรณ์สัมผัสมีความหลากหลายมาก Android จึงอาศัยคุณสมบัติการกำหนดค่าจำนวนมากเพื่ออธิบายคุณลักษณะและลักษณะการทำงานที่ต้องการของแต่ละอุปกรณ์
การจำแนกประเภทอุปกรณ์สัมผัส
อุปกรณ์อินพุตจัดเป็นอุปกรณ์ มัลติทัช หากเป็นไปตามเงื่อนไขทั้งสองข้อต่อไปนี้:
- อุปกรณ์อินพุตรายงานการมีอยู่ของแกนสัมบูรณ์
ABS_MT_POSITION_X
และABS_MT_POSITION_Y
- อุปกรณ์อินพุตไม่มีปุ่มเกมแพด เงื่อนไขนี้จะแก้ไขความคลุมเครือกับเกมแพดบางเกมที่รายงานแกนที่มีรหัสที่ทับซ้อนกับแกน MT
อุปกรณ์อินพุตจัดเป็นอุปกรณ์ สัมผัสเดียว หากเป็นไปตามเงื่อนไขทั้งสองข้อต่อไปนี้:
- อุปกรณ์อินพุตไม่จัดว่าเป็นอุปกรณ์มัลติทัช อุปกรณ์อินพุตถูกจัดประเภทเป็นอุปกรณ์สัมผัสเดียวหรืออุปกรณ์มัลติทัช ไม่ใช่ทั้งสองอย่าง
- อุปกรณ์อินพุตรายงานการมีอยู่ของแกนสัมบูรณ์
ABS_X
และABS_Y
และการมีอยู่ของรหัสคีย์BTN_TOUCH
เมื่ออุปกรณ์อินพุตถูกจัดประเภทเป็นอุปกรณ์สัมผัส การมีอยู่ของคีย์เสมือนจะถูกกำหนดโดยการพยายามโหลดไฟล์แผนผังคีย์เสมือนสำหรับอุปกรณ์ หากมีแมปคีย์เสมือน ไฟล์โครงร่างคีย์สำหรับอุปกรณ์ก็จะถูกโหลดด้วย โปรดดู [ไฟล์แผนที่คีย์เสมือน](#virtual-key-map-files) สำหรับข้อมูลเกี่ยวกับตำแหน่งและรูปแบบของไฟล์เหล่านี้
จากนั้น ระบบจะโหลดไฟล์การกำหนดค่าอุปกรณ์อินพุตสำหรับอุปกรณ์สัมผัส
อุปกรณ์สัมผัสในตัวทั้งหมดควรมีไฟล์การกำหนดค่าอุปกรณ์อินพุต หากไม่มีไฟล์การกำหนดค่าอุปกรณ์อินพุต ระบบจะเลือกการกำหนดค่าเริ่มต้นที่เหมาะสมกับอุปกรณ์ต่อพ่วงระบบสัมผัสทั่วไป เช่น หน้าจอสัมผัส USB หรือ Bluetooth HID หรือทัชแพด ค่าเริ่มต้นเหล่านี้ไม่ได้ออกแบบมาสำหรับหน้าจอสัมผัสในตัวและอาจส่งผลให้เกิดการทำงานที่ไม่ถูกต้อง
หลังจากที่โหลดการกำหนดค่าอุปกรณ์อินพุตแล้ว ระบบจะจัดประเภทอุปกรณ์อินพุตเป็น หน้าจอ สัมผัส ทัชแพด หรืออุปกรณ์ ตัวชี้
- อุปกรณ์ หน้าจอสัมผัส ใช้สำหรับจัดการวัตถุบนหน้าจอโดยตรง ผู้ใช้สัมผัสหน้าจอโดยตรง ดังนั้นระบบจึงไม่จำเป็นต้องมีค่าใช้จ่ายเพิ่มเติมใดๆ เพื่อระบุวัตถุที่ถูกจัดการ
- อุปกรณ์ ทัชแพด ใช้เพื่อให้ข้อมูลตำแหน่งที่แน่นอนแก่แอปเกี่ยวกับการสัมผัสบนพื้นที่เซ็นเซอร์ที่กำหนด มันจะมีประโยชน์สำหรับแท็บเล็ตดิจิไทเซอร์
- อุปกรณ์ พอยน์เตอร์ ใช้สำหรับจัดการวัตถุบนหน้าจอทางอ้อมโดยใช้เคอร์เซอร์ นิ้วถูกตีความว่าเป็นท่าทางสัมผัสแบบมัลติทัช เครื่องมืออื่นๆ เช่น สไตลัส จะถูกตีความโดยใช้ตำแหน่งที่แน่นอน ดู ท่าทางตัวชี้มัลติทัชทางอ้อม สำหรับข้อมูลเพิ่มเติม
กฎต่อไปนี้ใช้เพื่อจัดประเภทอุปกรณ์อินพุตเป็นหน้าจอสัมผัส ทัชแพด หรืออุปกรณ์ตัวชี้
- หากตั้งค่าคุณสมบัติ
touch.deviceType
ประเภทอุปกรณ์จะถูกตั้งค่าตามที่ระบุ - หากอุปกรณ์อินพุตรายงานการมีอยู่ของคุณสมบัติอินพุต
INPUT_PROP_DIRECT
(ผ่านEVIOCGPROP
ioctl) แสดงว่าประเภทอุปกรณ์จะถูกตั้งค่าเป็น หน้าจอสัมผัส เงื่อนไขนี้ถือว่าอุปกรณ์สัมผัสอินพุตโดยตรงเชื่อมต่อกับจอแสดงผลที่เชื่อมต่อด้วย - หากอุปกรณ์อินพุตรายงานการมีอยู่ของคุณสมบัติอินพุต
INPUT_PROP_POINTER
(ผ่านEVIOCGPROP
ioctl) ดังนั้นประเภทอุปกรณ์จะตั้งค่าเป็น ตัวชี้ - หากอุปกรณ์อินพุตรายงานการมีอยู่ของแกนสัมพัทธ์
REL_X
หรือREL_Y
ประเภทอุปกรณ์จะถูกตั้งค่าเป็น ทัชแพด เงื่อนไขนี้แก้ไขความคลุมเครือสำหรับอุปกรณ์อินพุตที่ประกอบด้วยทั้งเมาส์และทัชแพด ในกรณีนี้ ไม่ได้ใช้ทัชแพดเพื่อควบคุมตัวชี้เนื่องจากเมาส์ควบคุมอยู่แล้ว - มิฉะนั้น ประเภทอุปกรณ์จะถูกตั้งค่าเป็น ตัวชี้ ค่าเริ่มต้นนี้ช่วยให้แน่ใจว่าทัชแพดที่ไม่ได้ถูกกำหนดไว้เพื่อวัตถุประสงค์พิเศษอื่นใดจะควบคุมตัวชี้ได้
ปุ่ม
ปุ่มคือการควบคุม เสริม ที่แอพสามารถใช้เพื่อทำหน้าที่เพิ่มเติมได้ ปุ่มบนอุปกรณ์สัมผัสทำงานคล้ายกับปุ่มเมาส์ และส่วนใหญ่จะใช้กับอุปกรณ์สัมผัสประเภท ตัวชี้ หรือกับสไตลัส
รองรับปุ่มต่อไปนี้:
-
BTN_LEFT
: แมปกับMotionEvent.BUTTON_PRIMARY
-
BTN_RIGHT
: แมปกับMotionEvent.BUTTON_SECONDARY
-
BTN_MIDDLE
: แมปกับMotionEvent.BUTTON_MIDDLE
-
BTN_BACK
และBTN_SIDE
: แมปกับMotionEvent.BUTTON_BACK
การกดปุ่มนี้จะสังเคราะห์การกดปุ่มด้วยรหัสคีย์KeyEvent.KEYCODE_BACK
-
BTN_FORWARD
และBTN_EXTRA
: แมปกับMotionEvent.BUTTON_FORWARD
การกดปุ่มนี้จะสังเคราะห์การกดปุ่มด้วยรหัสคีย์KeyEvent.KEYCODE_FORWARD
-
BTN_STYLUS
: แมปกับMotionEvent.BUTTON_SECONDARY
-
BTN_STYLUS2
: แมปกับMotionEvent.BUTTON_TERTIARY
เครื่องมือและประเภทของเครื่องมือ
เครื่องมือ คือนิ้ว สไตลัส หรืออุปกรณ์อื่นๆ ที่ใช้ในการโต้ตอบกับอุปกรณ์ระบบสัมผัส อุปกรณ์สัมผัสบางประเภทสามารถแยกแยะเครื่องมือประเภทต่างๆ ได้
ที่อื่นๆ ใน Android เช่นเดียวกับใน MotionEvent
API เครื่องมือมักเรียกว่า ตัวชี้
รองรับประเภทเครื่องมือต่อไปนี้:
-
BTN_TOOL_FINGER
และMT_TOOL_FINGER
: แมปกับMotionEvent.TOOL_TYPE_FINGER
-
BTN_TOOL_PEN
และMT_TOOL_PEN
: แมปกับMotionEvent.TOOL_TYPE_STYLUS
-
BTN_TOOL_RUBBER
: แมปกับMotionEvent.TOOL_TYPE_ERASER
-
BTN_TOOL_BRUSH
: แมปกับMotionEvent.TOOL_TYPE_STYLUS
-
BTN_TOOL_PENCIL
: แมปกับMotionEvent.TOOL_TYPE_STYLUS
-
BTN_TOOL_AIRBRUSH
: แมปกับMotionEvent.TOOL_TYPE_STYLUS
-
BTN_TOOL_MOUSE
: แมปกับMotionEvent.TOOL_TYPE_MOUSE
-
BTN_TOOL_LENS
: แมปกับMotionEvent.TOOL_TYPE_MOUSE
-
BTN_TOOL_DOUBLETAP
,BTN_TOOL_TRIPLETAP
และBTN_TOOL_QUADTAP
: แมปกับMotionEvent.TOOL_TYPE_FINGER
เครื่องมือโฉบกับการสัมผัส
เครื่องมือสามารถสัมผัสกับอุปกรณ์สัมผัสหรืออยู่ในระยะและลอยอยู่เหนืออุปกรณ์ได้ อุปกรณ์สัมผัสบางรุ่นไม่สามารถตรวจจับการมีอยู่ของเครื่องมือที่อยู่เหนืออุปกรณ์สัมผัสได้ อุปกรณ์ที่ทำเช่นนั้น เช่น สไตลัสดิจิไทเซอร์ที่ใช้ RF มักจะตรวจจับได้เมื่อเครื่องมืออยู่ภายในขอบเขตที่จำกัดของดิจิไทเซอร์
ส่วนประกอบ InputReader
จะแยกความแตกต่างระหว่างเครื่องมือสัมผัสจากเครื่องมือที่วางเมาส์เหนือ ในทำนองเดียวกัน เครื่องมือการสัมผัสและเครื่องมือโฮเวอร์จะถูกรายงานไปยังแอปในรูปแบบที่แตกต่างกัน
เครื่องมือการสัมผัสจะถูกรายงานไปยังแอปต่างๆ ในรูปแบบเหตุการณ์การสัมผัสโดยใช้ MotionEvent.ACTION_DOWN
, MotionEvent.ACTION_MOVE
, MotionEvent.ACTION_DOWN
, MotionEvent.ACTION_POINTER_DOWN
และ MotionEvent.ACTION_POINTER_UP
เครื่องมือการวางเมาส์เหนือจะถูกรายงานไปยังแอปเป็นเหตุการณ์การเคลื่อนไหวทั่วไปโดยใช้ MotionEvent.ACTION_HOVER_ENTER
, MotionEvent.ACTION_HOVER_MOVE
และ MotionEvent.ACTION_HOVER_EXIT
ข้อกำหนดไดรเวอร์อุปกรณ์สัมผัส
- ไดรเวอร์อุปกรณ์ระบบสัมผัสควรลงทะเบียนเฉพาะแกนและรหัสกุญแจสำหรับแกนและปุ่มที่รองรับ การลงทะเบียนแกนหรือรหัสคีย์ที่ไม่รองรับอาจทำให้อัลกอริธึมการจัดประเภทอุปกรณ์สับสน หรือทำให้ระบบตรวจจับความสามารถของอุปกรณ์ไม่ถูกต้อง ตัวอย่างเช่น หากอุปกรณ์รายงานรหัสคีย์
BTN_TOUCH
ระบบจะถือว่าBTN_TOUCH
ถูกใช้เสมอเพื่อระบุว่าเครื่องมือกำลังสัมผัสหน้าจอหรือไม่ ดังนั้นจึงไม่ควรใช้BTN_TOUCH
เพื่อระบุว่าเครื่องมือนั้นอยู่ในช่วงและลอยอยู่เท่านั้น - อุปกรณ์แบบสัมผัสเดียวใช้เหตุการณ์อินพุต Linux ต่อไปนี้:
-
ABS_X
: (จำเป็น) รายงานพิกัด X ของเครื่องมือ -
ABS_Y
: (REQUIRED) รายงานพิกัด Y ของเครื่องมือ -
ABS_PRESSURE
: (เป็นทางเลือก) รายงานแรงกดทางกายภาพที่จ่ายไปที่ปลายเครื่องมือหรือความแรงของสัญญาณของหน้าสัมผัสแบบสัมผัส -
ABS_TOOL_WIDTH
: (ไม่บังคับ) รายงานพื้นที่หน้าตัดหรือความกว้างของหน้าสัมผัสแบบสัมผัสหรือของตัวเครื่องมือ -
ABS_DISTANCE
: (เป็นทางเลือก) รายงานระยะห่างของเครื่องมือจากพื้นผิวของอุปกรณ์สัมผัส -
ABS_TILT_X
: (เป็นทางเลือก) รายงานการเอียงของเครื่องมือจากพื้นผิวของอุปกรณ์สัมผัสตามแนวแกน X -
ABS_TILT_Y
: (เป็นทางเลือก) รายงานการเอียงของเครื่องมือจากพื้นผิวของอุปกรณ์สัมผัสตามแนวแกน Y -
BTN_TOUCH
: (จำเป็น) ระบุว่าเครื่องมือสัมผัสกับอุปกรณ์หรือไม่ -
BTN_LEFT
,BTN_RIGHT
,BTN_MIDDLE
,BTN_BACK
,BTN_SIDE
,BTN_FORWARD
,BTN_EXTRA
,BTN_STYLUS
,BTN_STYLUS2
: (เป็นทางเลือก) สถานะ ของปุ่ม รายงาน -
BTN_TOOL_FINGER
,BTN_TOOL_PEN
,BTN_TOOL_RUBBER
,BTN_TOOL_BRUSH
,BTN_TOOL_PENCIL
,BTN_TOOL_AIRBRUSH
,BTN_TOOL_MOUSE
,BTN_TOOL_LENS
,BTN_TOOL_DOUBLETAP
,BTN_TOOL_TRIPLETAP
,BTN_TOOL_QUADTAP
: (เป็นทางเลือก) รายงาน ประเภทเครื่องมือ
-
- อุปกรณ์มัลติทัชใช้เหตุการณ์อินพุต Linux ต่อไปนี้:
-
ABS_MT_POSITION_X
: (REQUIRED) รายงานพิกัด X ของเครื่องมือ -
ABS_MT_POSITION_Y
: (REQUIRED) รายงานพิกัด Y ของเครื่องมือ -
ABS_MT_PRESSURE
: (ตัวเลือก) รายงานแรงกดทางกายภาพที่จ่ายไปที่ปลายของเครื่องมือหรือความแรงของสัญญาณของหน้าสัมผัสแบบสัมผัส -
ABS_MT_TOUCH_MAJOR
: (เป็นทางเลือก) รายงานพื้นที่หน้าตัดของหน้าสัมผัสแบบสัมผัส หรือความยาวของมิติที่ยาวกว่าของหน้าสัมผัสแบบสัมผัส -
ABS_MT_TOUCH_MINOR
: (ไม่บังคับ) รายงานความยาวของมิติที่สั้นกว่าของหน้าสัมผัสแบบสัมผัส ไม่ควรใช้แกนนี้หากABS_MT_TOUCH_MAJOR
กำลังรายงานการวัดพื้นที่ -
ABS_MT_WIDTH_MAJOR
: (ไม่บังคับ) รายงานพื้นที่หน้าตัดของเครื่องมือ หรือความยาวของมิติที่ยาวกว่าของเครื่องมือ อย่าใช้แกนนี้เว้นแต่คุณจะรู้ขนาดของเครื่องมือเอง -
ABS_MT_WIDTH_MINOR
: (ไม่บังคับ) รายงานความยาวของมิติที่สั้นกว่าของเครื่องมือ แกนนี้ไม่ควรใช้หากABS_MT_WIDTH_MAJOR
กำลังรายงานการวัดพื้นที่หรือหากไม่ทราบขนาดของเครื่องมือ -
ABS_MT_ORIENTATION
: (เป็นทางเลือก) รายงานการวางแนวของเครื่องมือ -
ABS_MT_DISTANCE
: (เป็นทางเลือก) รายงานระยะห่างของเครื่องมือจากพื้นผิวของอุปกรณ์สัมผัส -
ABS_MT_TOOL_TYPE
: (เป็นทางเลือก) รายงาน ประเภทเครื่องมือ เป็นMT_TOOL_FINGER
หรือMT_TOOL_PEN
-
ABS_MT_TRACKING_ID
: (ไม่บังคับ) รายงานรหัสติดตามของเครื่องมือ รหัสติดตามเป็นจำนวนเต็มไม่เป็นลบตามอำเภอใจ ซึ่งใช้ในการระบุและติดตามเครื่องมือแต่ละรายการแยกกันเมื่อมีเครื่องมือหลายรายการทำงานอยู่ ตัวอย่างเช่น เมื่อหลายนิ้วแตะอุปกรณ์ แต่ละนิ้วควรได้รับการกำหนดรหัสติดตามที่แตกต่างกัน ซึ่งจะใช้ตราบเท่าที่นิ้วยังคงสัมผัสกัน รหัสติดตามสามารถนำมาใช้ซ้ำได้เมื่อเครื่องมือที่เกี่ยวข้องย้ายออกนอกขอบเขต -
ABS_MT_SLOT
: (เป็นทางเลือก) รายงาน ID สล็อตของเครื่องมือ เมื่อใช้โปรโตคอลมัลติทัช Linux 'B' โปรดดูเอกสารประกอบโปรโตคอล Linux multi-touch สำหรับรายละเอียดเพิ่มเติม -
BTN_TOUCH
: (จำเป็น) ระบุว่าเครื่องมือสัมผัสกับอุปกรณ์หรือไม่ -
BTN_LEFT
,BTN_RIGHT
,BTN_MIDDLE
,BTN_BACK
,BTN_SIDE
,BTN_FORWARD
,BTN_EXTRA
,BTN_STYLUS
,BTN_STYLUS2
: (เป็นทางเลือก) สถานะ ของปุ่ม รายงาน -
BTN_TOOL_FINGER
,BTN_TOOL_PEN
,BTN_TOOL_RUBBER
,BTN_TOOL_BRUSH
,BTN_TOOL_PENCIL
,BTN_TOOL_AIRBRUSH
,BTN_TOOL_MOUSE
,BTN_TOOL_LENS
,BTN_TOOL_DOUBLETAP
,BTN_TOOL_TRIPLETAP
,BTN_TOOL_QUADTAP
: (เป็นทางเลือก) รายงาน ประเภทเครื่องมือ
-
- หากมีการกำหนดแกนสำหรับทั้งโปรโตคอลซิงเกิลทัชและมัลติทัช ระบบจะใช้เฉพาะแกนมัลติทัชเท่านั้น และแกนซิงเกิลทัชจะถูกละเว้น
ค่าต่ำสุดและสูงสุดของแกน
ABS_X
,ABS_Y
,ABS_MT_POSITION_X
และABS_MT_POSITION_Y
กำหนดขอบเขตของพื้นที่ใช้งานของอุปกรณ์ในหน่วยพื้นผิวเฉพาะของอุปกรณ์ ในกรณีของหน้าจอสัมผัส พื้นที่ใช้งานจะอธิบายส่วนของอุปกรณ์สัมผัสที่ครอบคลุมจอแสดงผลจริงๆสำหรับหน้าจอสัมผัส ระบบจะประมาณตำแหน่งการสัมผัสที่รายงานในหน่วยพื้นผิวโดยอัตโนมัติเพื่อให้ได้ตำแหน่งการสัมผัสในพิกเซลของจอแสดงผลตามการคำนวณต่อไปนี้:
displayX = (x - minX) * displayWidth / (maxX - minX + 1) displayY = (y - minY) * displayHeight / (maxY - minY + 1)
หน้าจอสัมผัสอาจรายงานการสัมผัสนอกพื้นที่ใช้งานที่รายงาน
การสัมผัสที่เริ่มต้นนอกพื้นที่ใช้งานจะไม่ถูกส่งไปยังแอพ แต่สามารถใช้กับปุ่มเสมือนได้
การสัมผัสที่เริ่มต้นภายในพื้นที่ใช้งาน หรือการเข้าและออกจากพื้นที่แสดงผลจะถูกส่งไปยังแอปต่างๆ ดังนั้น หากการสัมผัสเริ่มต้นภายในขอบเขตของแอพแล้วเคลื่อนออกนอกพื้นที่ใช้งาน แอพอาจได้รับกิจกรรมการสัมผัสที่มีพิกัดการแสดงผลที่เป็นค่าลบหรือเกินขอบเขตของจอแสดงผล นี่เป็นลักษณะการทำงานที่คาดหวัง
อุปกรณ์สัมผัสไม่ควรยึดพิกัดการสัมผัสเข้ากับขอบเขตของพื้นที่ใช้งาน หากมีการสัมผัสออกจากพื้นที่ใช้งาน ควรรายงานว่าอยู่นอกพื้นที่ใช้งาน หรือไม่ควรรายงานเลย
ตัวอย่างเช่น หากนิ้วของผู้ใช้สัมผัสใกล้กับมุมซ้ายบนของหน้าจอสัมผัส ก็อาจรายงานพิกัดของ (minX, minY) หากนิ้วยังคงเคลื่อนออกนอกพื้นที่ทำงานต่อไป หน้าจอสัมผัสควรเริ่มรายงานพิกัดที่มีส่วนประกอบน้อยกว่า minX และ minY เช่น (minX - 2, minY - 3) หรือควรหยุดการรายงานการสัมผัสทั้งหมด กล่าวอีกนัยหนึ่ง หน้าจอสัมผัส ไม่ ควรรายงาน (minX, minY) เมื่อนิ้วของผู้ใช้สัมผัสกันจริงๆ นอกพื้นที่ใช้งาน
การยึดพิกัดการสัมผัสเข้ากับขอบจอแสดงผลจะสร้างขอบเขตแข็งเทียมรอบๆ ขอบหน้าจอ ซึ่งป้องกันไม่ให้ระบบติดตามการเคลื่อนไหวที่เข้าหรือออกจากขอบเขตของพื้นที่แสดงผลได้อย่างราบรื่น
ค่าที่รายงานโดย
ABS_PRESSURE
หรือABS_MT_PRESSURE
หากมีการรายงานเลย จะต้องไม่เป็นศูนย์เมื่อเครื่องมือสัมผัสกับอุปกรณ์ และเป็นศูนย์ มิฉะนั้น เพื่อระบุว่าเครื่องมือกำลังลอยอยู่การรายงานข้อมูลแรงกดดันเป็น ทางเลือก แต่ขอแนะนำอย่างยิ่ง แอพสามารถใช้ข้อมูลแรงกดเพื่อใช้การวาดภาพที่ไวต่อแรงกดและเอฟเฟกต์อื่นๆ
ค่าที่รายงานโดย
ABS_TOOL_WIDTH
,ABS_MT_TOUCH_MAJOR
,ABS_MT_TOUCH_MINOR
,ABS_MT_WIDTH_MAJOR
, หรือABS_MT_WIDTH_MINOR
ควรจะไม่เป็นศูนย์เมื่อเครื่องมือสัมผัสกับอุปกรณ์และมีค่าเป็นศูนย์ แต่ไม่จำเป็น ตัวอย่างเช่น อุปกรณ์สัมผัสอาจสามารถวัดขนาดของหน้าสัมผัสแบบสัมผัสด้วยนิ้วได้ แต่ไม่ใช่ขนาดหน้าสัมผัสแบบสัมผัสด้วยสไตลัสข้อมูลขนาดการรายงานเป็น ทางเลือก แต่ขอแนะนำเป็นอย่างยิ่ง แอพสามารถใช้ข้อมูลแรงกดเพื่อใช้งานการวาดภาพตามขนาดและเอฟเฟกต์อื่นๆ
ค่าที่รายงานโดย
ABS_DISTANCE
หรือABS_MT_DISTANCE
ควรเข้าใกล้ศูนย์เมื่อเครื่องมือสัมผัสกับอุปกรณ์ ระยะห่างสามารถคงไว้ไม่เป็นศูนย์แม้ว่าเครื่องมือจะสัมผัสกันโดยตรงก็ตาม ค่าที่แน่นอนที่รายงานจะขึ้นอยู่กับลักษณะที่ฮาร์ดแวร์วัดระยะทางการรายงานข้อมูลระยะทางเป็น ทางเลือก แต่แนะนำสำหรับอุปกรณ์สไตลัส
ค่าที่รายงานโดย
ABS_TILT_X
และABS_TILT_Y
ควรเป็นศูนย์เมื่อเครื่องมือตั้งฉากกับอุปกรณ์ การเอียงที่ไม่เป็นศูนย์แสดงว่าเครื่องมือถูกยึดไว้ในแนวเอียงมุมเอียงตามแกน X และ Y จะถือว่าระบุเป็นองศาจากแนวตั้งฉาก จุดศูนย์กลาง (ตั้งฉากอย่างสมบูรณ์) กำหนดโดย
(max + min) / 2
สำหรับแต่ละแกน ค่าที่น้อยกว่าจุดกึ่งกลางแสดงถึงการเอียงขึ้นหรือไปทางซ้าย ค่าที่มากกว่าจุดศูนย์กลางแสดงถึงการเอียงลงหรือไปทางขวาInputReader
แปลงส่วนประกอบการเอียง X และ Y ให้เป็นมุมเอียงตั้งฉากตั้งแต่ 0 ถึงPI / 2
เรเดียน และมุมการวางแนวระนาบตั้งแต่-PI
ถึงPI
เรเดียน การแสดงนี้ส่งผลให้เกิดคำอธิบายการวางแนวที่เข้ากันได้กับสิ่งที่ใช้อธิบายการสัมผัสด้วยนิ้วการรายงานข้อมูลการเอียงเป็น ทางเลือก แต่แนะนำสำหรับอุปกรณ์สไตลัส
หากประเภทเครื่องมือรายงานโดย
ABS_MT_TOOL_TYPE
จะแทนที่ข้อมูลประเภทเครื่องมือใดๆ ที่รายงานโดยBTN_TOOL_*
หากไม่มีข้อมูลประเภทเครื่องมือเลย ประเภทเครื่องมือจะมีค่าเริ่มต้นเป็นMotionEvent.TOOL_TYPE_FINGER
เครื่องมือถูกกำหนดให้ใช้งานได้ตามเงื่อนไขต่อไปนี้:
เมื่อใช้โปรโตคอลสัมผัสเดียว เครื่องมือจะทำงานหาก
BTN_TOUCH
หรือBTN_TOOL_*
เป็น 1เงื่อนไขนี้บอกเป็นนัยว่า
InputReader
จำเป็นต้องมีข้อมูลบางอย่างเกี่ยวกับลักษณะของเครื่องมือเป็นอย่างน้อย ไม่ว่าจะเป็นการสัมผัสหรืออย่างน้อยก็ประเภทของเครื่องมือ หากไม่มีข้อมูล แสดงว่าเครื่องมือนั้นไม่ได้ใช้งาน (อยู่นอกขอบเขต)- เมื่อใช้โปรโตคอลมัลติทัช 'A' เครื่องมือจะทำงานทุกครั้งที่ปรากฏในรายงานการซิงค์ล่าสุด เมื่อเครื่องมือหยุดปรากฏในรายงานการซิงค์ เครื่องมือนั้นก็จะสิ้นสุดลง
- เมื่อใช้โปรโตคอลมัลติทัช 'B' เครื่องมือจะทำงานตราบใดที่ยังมีช่องที่ใช้งานอยู่ เมื่อเคลียร์ช่องแล้ว เครื่องมือก็หยุดอยู่
- เครื่องมือถูกกำหนดให้วางเมาส์ตามเงื่อนไขต่อไปนี้:
- หากเครื่องมือเป็น
BTN_TOOL_MOUSE
หรือBTN_TOOL_LENS
แสดงว่าเครื่องมือไม่โฮเวอร์ แม้ว่าเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้จะเป็นจริงก็ตาม - หากเครื่องมือทำงานอยู่และคนขับรายงานข้อมูลความดัน และความดันที่รายงานเป็นศูนย์ แสดงว่าเครื่องมือลอยอยู่
- หากเครื่องมือทำงานอยู่และไดรเวอร์รองรับรหัสคีย์
BTN_TOUCH
และBTN_TOUCH
มีค่าเป็นศูนย์ แสดงว่าเครื่องมือกำลังโฮเวอร์
- หากเครื่องมือเป็น
-
InputReader
รองรับทั้งโปรโตคอลมัลติทัช 'A' และ 'B' ไดรเวอร์ใหม่ควรใช้โปรโตคอล 'B' แต่ใช้งานได้ สำหรับ Android 4.0 อาจจำเป็นต้องเปลี่ยนไดรเวอร์หน้าจอสัมผัสเพื่อให้สอดคล้องกับข้อกำหนดโปรโตคอลอินพุตของ Linux
อาจจำเป็นต้องมีการเปลี่ยนแปลงต่อไปนี้:
เมื่อเครื่องมือไม่ทำงาน (นิ้ว "ขึ้น") ควรหยุดปรากฏในรายงานการซิงค์มัลติทัชที่ตามมา เมื่อเครื่องมือทั้งหมดไม่ทำงาน (นิ้วทั้งหมด "ขึ้น") ไดรเวอร์ควรส่งแพ็คเก็ตรายงานการซิงค์ที่ว่างเปล่า เช่น
SYN_MT_REPORT
ตามด้วยSYN_REPORT
Android เวอร์ชันก่อนหน้าคาดว่าจะรายงานเหตุการณ์ "up" โดยการส่งค่าความดันเป็น 0 ลักษณะการทำงานแบบเก่าเข้ากันไม่ได้กับข้อกำหนดโปรโตคอลอินพุตของ Linux และไม่ได้รับการสนับสนุนอีกต่อไป
ควรรายงานข้อมูลความดันทางกายภาพหรือความแรงของสัญญาณโดยใช้
ABS_MT_PRESSURE
Android เวอร์ชันก่อนหน้าดึงข้อมูลแรงกดดันจาก
ABS_MT_TOUCH_MAJOR
ลักษณะการทำงานแบบเก่าเข้ากันไม่ได้กับข้อกำหนดเฉพาะโปรโตคอลอินพุตของ Linux และไม่ได้รับการสนับสนุนอีกต่อไป- ควรรายงานข้อมูลขนาดการสัมผัสโดยใช้
ABS_MT_TOUCH_MAJOR
Android เวอร์ชันก่อนหน้าดึงข้อมูลขนาดมาจาก
ABS_MT_TOOL_MAJOR
ลักษณะการทำงานแบบเก่าเข้ากันไม่ได้กับข้อกำหนดเฉพาะโปรโตคอลอินพุตของ Linux และไม่ได้รับการสนับสนุนอีกต่อไป
การทำงานของอุปกรณ์สัมผัส
ต่อไปนี้เป็นข้อมูลสรุปโดยย่อเกี่ยวกับการทำงานของอุปกรณ์ระบบสัมผัสบน Android
-
EventHub
อ่านเหตุการณ์ดิบจากไดรเวอร์evdev
-
InputReader
ใช้เหตุการณ์ดิบและอัปเดตสถานะภายในเกี่ยวกับตำแหน่งและคุณลักษณะอื่นๆ ของแต่ละเครื่องมือ นอกจากนี้ยังติดตามสถานะของปุ่ม - ถ้ากดหรือปล่อย BACK หรือ FORWARD
InputReader
จะแจ้งInputDispatcher
เกี่ยวกับเหตุการณ์สำคัญ -
InputReader
กำหนดว่ามีการกดปุ่มเสมือนเกิดขึ้นหรือไม่ หากเป็นเช่นนั้น ระบบจะแจ้งInputDispatcher
เกี่ยวกับเหตุการณ์สำคัญ -
InputReader
กำหนดว่าการสัมผัสเริ่มต้นภายในขอบเขตของจอแสดงผลหรือไม่ หากเป็นเช่นนั้น ระบบจะแจ้งInputDispatcher
เกี่ยวกับเหตุการณ์การสัมผัส - หากไม่มีเครื่องมือสัมผัส แต่มีเครื่องมือโฮเวอร์อย่างน้อยหนึ่ง
InputReader
จะแจ้งInputDispatcher
เกี่ยวกับเหตุการณ์โฮเวอร์ - หากประเภทอุปกรณ์สัมผัสเป็น ตัวชี้
InputReader
จะดำเนินการตรวจจับท่าทางของตัวชี้ เลื่อนตัวชี้และจุดตามลำดับ และแจ้งInputDispatcher
เกี่ยวกับเหตุการณ์ของตัวชี้ -
InputDispatcher
ใช้WindowManagerPolicy
เพื่อพิจารณาว่าควรส่งเหตุการณ์หรือไม่ และควรปลุกอุปกรณ์หรือไม่ จากนั้นInputDispatcher
จะส่งเหตุการณ์ไปยังแอปที่เหมาะสม
การกำหนดค่าอุปกรณ์สัมผัส
ลักษณะการทำงานของอุปกรณ์สัมผัสถูกกำหนดโดยแกนของอุปกรณ์ ปุ่ม คุณสมบัติอินพุต การกำหนดค่าอุปกรณ์อินพุต แผนผังคีย์เสมือน และเค้าโครงคีย์
โปรดดูส่วนต่อไปนี้สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับไฟล์ที่มีส่วนร่วมในการกำหนดค่าแป้นพิมพ์:
คุณสมบัติ
ระบบอาศัยคุณสมบัติการกำหนดค่าอุปกรณ์อินพุตจำนวนมากเพื่อกำหนดค่าและปรับเทียบพฤติกรรมของอุปกรณ์สัมผัส
เหตุผลหนึ่งก็คือไดรเวอร์อุปกรณ์สำหรับอุปกรณ์สัมผัสมักจะรายงานลักษณะของการสัมผัสโดยใช้หน่วยเฉพาะอุปกรณ์
ตัวอย่างเช่น อุปกรณ์ระบบสัมผัสจำนวนมากจะวัดพื้นที่สัมผัสของระบบสัมผัสโดยใช้มาตราส่วนเฉพาะอุปกรณ์ภายใน เช่น จำนวนโหนดเซ็นเซอร์ทั้งหมดที่ถูกกระตุ้นโดยการสัมผัส ค่าขนาดดิบนี้จะไม่มีความหมายสำหรับแอป เนื่องจากจำเป็นต้องทราบขนาดทางกายภาพและคุณลักษณะอื่นๆ ของโหนดเซ็นเซอร์ของอุปกรณ์สัมผัส
ระบบใช้พารามิเตอร์การสอบเทียบที่เข้ารหัสในไฟล์การกำหนดค่าอุปกรณ์อินพุตเพื่อถอดรหัส แปลง และทำให้ค่าที่รายงานโดยอุปกรณ์สัมผัสเป็นมาตรฐานให้เป็นการแสดงมาตรฐานที่เรียบง่ายกว่าที่แอปสามารถเข้าใจได้
ข้อตกลงด้านเอกสาร
เพื่อวัตถุประสงค์ด้านเอกสาร เราใช้หลักเกณฑ์ต่อไปนี้เพื่ออธิบายค่าที่ระบบใช้ในระหว่างกระบวนการสอบเทียบ
ค่าแกนดิบ
นิพจน์ต่อไปนี้แสดงถึงค่าดิบที่รายงานโดยไดรเวอร์อุปกรณ์สัมผัสเป็นเหตุการณ์ EV_ABS
-
raw.x
- ค่าของแกน
ABS_X
หรือABS_MT_POSITION_X
-
raw.y
- ค่าของแกน
ABS_Y
หรือABS_MT_POSITION_Y
-
raw.pressure
- ค่าของแกน
ABS_PRESSURE
หรือABS_MT_PRESSURE
หรือ 0 หากไม่มี -
raw.touchMajor
- ค่าของแกน
ABS_MT_TOUCH_MAJOR
หรือ 0 หากไม่มี -
raw.touchMinor
- ค่าของแกน
ABS_MT_TOUCH_MINOR
หรือraw.touchMajor
หากไม่มี -
raw.toolMajor
- ค่าของแกน
ABS_TOOL_WIDTH
หรือABS_MT_WIDTH_MAJOR
หรือ 0 หากไม่มี -
raw.toolMinor
- ค่าของแกน
ABS_MT_WIDTH_MINOR
หรือraw.toolMajor
หากไม่มี -
raw.orientation
- ค่าของแกน
ABS_MT_ORIENTATION
หรือ 0 หากไม่มี -
raw.distance
- ค่าของแกน
ABS_DISTANCE
หรือABS_MT_DISTANCE
หรือ 0 หากไม่มี -
raw.tiltX
- ค่าของแกน
ABS_TILT_X
หรือ 0 หากไม่มี -
raw.tiltY
- ค่าของแกน
ABS_TILT_Y
หรือ 0 หากไม่มี
ช่วงแกนดิบ
นิพจน์ต่อไปนี้แสดงถึงขอบเขตของค่าดิบ ได้มาโดยการเรียก EVIOCGABS
ioctl สำหรับแต่ละแกน
-
raw.*.min
- ค่าต่ำสุดรวมของแกนดิบ
-
raw.*.max
- รวมค่าสูงสุดของแกนดิบ
-
raw.*.range
- เทียบเท่ากับ
raw.*.max - raw.*.min
-
raw.*.fuzz
- ความแม่นยำของแกนดิบ เช่น. fuzz = 1 หมายถึงค่าที่แม่นยำถึง +/- 1 หน่วย
-
raw.width
- ความกว้างรวมของพื้นที่สัมผัส เทียบเท่ากับ
raw.x.range + 1
-
raw.height
- ความสูงรวมของพื้นที่สัมผัส เทียบเท่ากับ
raw.y.range + 1
ช่วงเอาท์พุท
นิพจน์ต่อไปนี้แสดงถึงคุณลักษณะของระบบพิกัดเอาต์พุต ระบบใช้การประมาณค่าเชิงเส้นเพื่อแปลข้อมูลตำแหน่งสัมผัสจากหน่วยพื้นผิวที่ใช้โดยอุปกรณ์สัมผัสเป็นหน่วยเอาต์พุตที่รายงานไปยังแอป เช่น พิกเซลที่แสดง
-
output.width
- ความกว้างเอาต์พุต สำหรับหน้าจอสัมผัส (ที่เกี่ยวข้องกับจอแสดงผล) นี่คือความกว้างของจอแสดงผลเป็นพิกเซล สำหรับทัชแพด (ไม่เกี่ยวข้องกับจอแสดงผล) ความกว้างเอาต์พุตจะเท่ากับ
raw.width
ซึ่งบ่งชี้ว่าไม่มีการแก้ไขใดๆ -
output.height
- ความสูงของเอาท์พุท สำหรับหน้าจอสัมผัส (ที่เกี่ยวข้องกับจอแสดงผล) นี่คือความสูงของจอแสดงผลเป็นพิกเซล สำหรับทัชแพด (ไม่เกี่ยวข้องกับจอแสดงผล) ความสูงของเอาต์พุตจะเท่ากับ
raw.height
ซึ่งบ่งชี้ว่าไม่มีการแก้ไขใดๆ -
output.diag
- ความยาวเส้นทแยงมุมของระบบพิกัดเอาต์พุต เทียบเท่ากับ
sqrt(output.width ^2 + output.height ^2)
การกำหนดค่าพื้นฐาน
ตัวทำแผนที่อินพุตแบบสัมผัสใช้คุณสมบัติการกำหนดค่าหลายอย่างในไฟล์การกำหนดค่าอุปกรณ์อินพุตเพื่อระบุค่าการสอบเทียบ ตารางต่อไปนี้อธิบายคุณสมบัติการกำหนดค่าวัตถุประสงค์ทั่วไปบางประการ คุณสมบัติอื่นๆ ทั้งหมดอธิบายไว้ในส่วนต่อไปนี้พร้อมกับฟิลด์ที่ใช้ในการปรับเทียบ
touch.deviceType
คำจำกัดความ: touch.deviceType
= touchScreen
| touchPad
| pointer
| default
ระบุประเภทอุปกรณ์สัมผัส
หากค่าเป็น
touchScreen
อุปกรณ์สัมผัสจะเป็นหน้าจอสัมผัสที่เชื่อมโยงกับจอแสดงผลหากค่าเป็น
touchPad
อุปกรณ์สัมผัสจะเป็นทัชแพดที่ไม่เกี่ยวข้องกับจอแสดงผลหากค่าเป็น
pointer
อุปกรณ์สัมผัสจะเป็นทัชแพดที่ไม่เกี่ยวข้องกับจอแสดงผล และการเคลื่อนไหวของอุปกรณ์นั้นใช้สำหรับ ท่าทางของตัวชี้มัลติทัชทางอ้อมหากค่าเป็นค่า
default
ระบบจะตรวจจับประเภทอุปกรณ์โดยอัตโนมัติตามอัลกอริทึมการจำแนกประเภท
โปรดดูส่วน การจัดประเภท สำหรับรายละเอียดเพิ่มเติมว่าประเภทอุปกรณ์มีอิทธิพลต่อพฤติกรรมของอุปกรณ์สัมผัสอย่างไร
ใน Android 3 และต่ำกว่า อุปกรณ์สัมผัสทั้งหมดจะถือว่าเป็นหน้าจอสัมผัส
touch.orientationAware
คำจำกัดความ: touch.orientationAware
= 0
| 1
ระบุว่าอุปกรณ์สัมผัสควรตอบสนองต่อการเปลี่ยนแปลงการวางแนวการแสดงผลหรือไม่
หากค่าเป็น
1
ตำแหน่งการสัมผัสที่อุปกรณ์สัมผัสรายงานจะถูกหมุนทุกครั้งที่การวางแนวจอแสดงผลเปลี่ยนแปลงหากค่าเป็น
0
ตำแหน่งการสัมผัสที่รายงานโดยอุปกรณ์สัมผัสจะต้านทานต่อการเปลี่ยนแปลงการวางแนวของจอแสดงผล
ค่าเริ่มต้นคือ 1
หากอุปกรณ์เป็นหน้าจอสัมผัส มิฉะนั้นจะเป็น 0
ระบบจะแยกความแตกต่างระหว่างหน้าจอสัมผัสและจอแสดงผลภายในและภายนอก หน้าจอสัมผัสภายในที่รับรู้การวางแนวจะหมุนตามการวางแนวของจอแสดงผลภายใน หน้าจอสัมผัสภายนอกที่รับรู้การวางแนวจะหมุนตามการวางแนวของจอแสดงผลภายนอก
การรับรู้การวางแนวใช้เพื่อรองรับการหมุนหน้าจอสัมผัสบนอุปกรณ์เช่น Nexus One ตัวอย่างเช่น เมื่อหมุนอุปกรณ์ตามเข็มนาฬิกา 90 องศาจากการวางแนวตามธรรมชาติ ตำแหน่งสัมบูรณ์ของการสัมผัสจะถูกแมปใหม่ โดยการสัมผัสที่มุมซ้ายบนของระบบพิกัดสัมบูรณ์ของหน้าจอสัมผัสจะถูกรายงานว่าเป็นการสัมผัสที่มุมซ้ายบน มุมของระบบพิกัดที่หมุนของจอแสดงผล การทำเช่นนี้เกิดขึ้นเพื่อให้สามารถรายงานการสัมผัสด้วยระบบพิกัดเดียวกันกับที่แอปใช้ในการวาดองค์ประกอบภาพ
ก่อนที่จะมี Honeycomb อุปกรณ์สัมผัสทั้งหมดจะถือว่ามีการรับรู้การวางแนว
touch.gestureMode
คำจำกัดความ: touch.gestureMode
= pointer
| spots
| default
ระบุโหมดการนำเสนอสำหรับท่าทางของตัวชี้ คุณสมบัติการกำหนดค่านี้เกี่ยวข้องเฉพาะเมื่ออุปกรณ์สัมผัสเป็นแบบ พอยน์เตอร์
หากค่าเป็น
pointer
ท่าทางบนทัชแพดจะแสดงผ่านเคอร์เซอร์ที่คล้ายกับตัวชี้เมาส์หากค่าเป็น
spots
ท่าทางบนทัชแพดจะแสดงด้วยจุดยึดที่แสดงถึงจุดศูนย์กลางของท่าทาง และชุดจุดวงกลมที่แสดงตำแหน่งของนิ้วแต่ละนิ้ว
ค่าเริ่มต้นคือ pointer
เมื่อมีการตั้งค่าคุณสมบัติอินพุต INPUT_PROP_SEMI_MT
หรือ spots
เป็นอย่างอื่น
ช่อง X และ Y
ช่อง X และ Y ให้ข้อมูลตำแหน่งสำหรับศูนย์กลางของพื้นที่สัมผัส
การคำนวณ
การคำนวณไม่ซับซ้อน: ข้อมูลตำแหน่งจากไดรเวอร์ระบบสัมผัสจะถูกประมาณเชิงเส้นไปยังระบบพิกัดเอาท์พุต
xScale = output.width / raw.width yScale = output.height / raw.height If not orientation aware or screen rotation is 0 degrees: output.x = (raw.x - raw.x.min) * xScale output.y = (raw.y - raw.y.min) * yScale Else If rotation is 90 degrees: output.x = (raw.y - raw.y.min) * yScale output.y = (raw.x.max - raw.x) * xScale Else If rotation is 180 degrees: output.x = (raw.x.max - raw.x) * xScale output.y = (raw.y.max - raw.y) * yScale Else If rotation is 270 degrees: output.x = (raw.y.max - raw.y) * yScale output.y = (raw.x - raw.x.min) * xScale End If
touchMajor, touchMinor, toolMajor, toolMinor, ฟิลด์ขนาด
ช่อง touchMajor
และ touchMinor
อธิบายขนาดโดยประมาณของพื้นที่สัมผัสในหน่วยเอาต์พุต (พิกเซล)
ช่อง toolMajor
และ toolMinor
อธิบายขนาดโดยประมาณของ เครื่องมือ ในหน่วยเอาต์พุต (พิกเซล)
ฟิลด์ size
จะอธิบายขนาดปกติของการสัมผัสโดยสัมพันธ์กับการสัมผัสที่ใหญ่ที่สุดเท่าที่อุปกรณ์สัมผัสสามารถสัมผัสได้ ขนาดมาตรฐานที่เล็กที่สุดที่เป็นไปได้คือ 0.0 (ไม่มีการสัมผัส หรือไม่สามารถวัดได้) และขนาดมาตรฐานที่ใหญ่ที่สุดที่เป็นไปได้คือ 1.0 (พื้นที่เซนเซอร์อิ่มตัว)
เมื่อสามารถวัดทั้งความยาวและความกว้างโดยประมาณได้ ช่อง touchMajor
จะระบุขนาดที่ยาวกว่า และช่อง touchMinor
จะระบุขนาดที่สั้นกว่าของพื้นที่สัมผัส เมื่อสามารถวัดได้เพียงเส้นผ่านศูนย์กลางโดยประมาณของพื้นที่หน้าสัมผัส ดังนั้นฟิลด์ touchMajor
และ touchMinor
จะเท่ากัน
ในทำนองเดียวกัน ฟิลด์ toolMajor
ระบุมิติที่ยาวกว่า และฟิลด์ toolMinor
ระบุมิติที่สั้นกว่าของพื้นที่หน้าตัดของเครื่องมือ
หากขนาดการสัมผัสไม่พร้อมใช้งานแต่มีขนาดเครื่องมือให้เลือก ขนาดเครื่องมือจะถูกตั้งค่าให้เท่ากับขนาดการสัมผัส ในทางกลับกัน หากขนาดเครื่องมือไม่พร้อมใช้งานแต่มีขนาดระบบสัมผัส ขนาดระบบสัมผัสจะถูกตั้งค่าให้เท่ากับขนาดเครื่องมือ
อุปกรณ์ระบบสัมผัสจะวัดหรือรายงานขนาดระบบสัมผัสและขนาดเครื่องมือในรูปแบบต่างๆ การใช้งานในปัจจุบันรองรับการวัดที่แตกต่างกันสามประเภท ได้แก่ เส้นผ่านศูนย์กลาง พื้นที่ และกรอบขอบเขตเรขาคณิตในหน่วยพื้นผิว
คำจำกัดความ: touch.size.calibration
= none
| geometric
| diameter
| area
| default
ระบุชนิดของการวัดที่ใช้โดยไดรเวอร์ระบบสัมผัสเพื่อรายงานขนาดระบบสัมผัสและขนาดเครื่องมือ
หากค่าเป็น
none
ขนาดจะถูกตั้งค่าเป็นศูนย์หากค่าเป็น
geometric
จะถือว่าขนาดระบุในหน่วยพื้นผิวเดียวกันกับตำแหน่ง ดังนั้นจึงปรับขนาดในลักษณะเดียวกันหากค่าคือ
diameter
ขนาดจะถือว่าเป็นสัดส่วนกับเส้นผ่านศูนย์กลาง (ความกว้าง) ของการสัมผัสหรือเครื่องมือหากค่าคือ
area
ขนาดจะถือว่าเป็นสัดส่วนกับพื้นที่ของการสัมผัสหรือเครื่องมือหากค่าเป็นค่า
default
ระบบจะใช้การสอบเทียบgeometric
หากแกนraw.touchMajor
หรือraw.toolMajor
พร้อมใช้งาน มิฉะนั้นจะใช้การสอบเทียบnone
สัมผัสขนาดสเกล
คำจำกัดความ: touch.size.scale
= <จำนวนจุดลอยตัวที่ไม่เป็นลบ>
ระบุตัวคูณสเกลคงที่ที่ใช้ในการสอบเทียบ
ค่าเริ่มต้นคือ 1.0
touch.size.อคติ
คำจำกัดความ: touch.size.bias
= <จำนวนจุดลอยตัวที่ไม่เป็นลบ>
ระบุค่าอคติคงที่ที่ใช้ในการสอบเทียบ
ค่าเริ่มต้นคือ 0.0
touch.size.isSummed
คำจำกัดความ: touch.size.isSummed
= 0
| 1
ระบุว่าขนาดจะรายงานเป็นผลรวมของขนาดของผู้ติดต่อที่ใช้งานอยู่ทั้งหมด หรือรายงานแยกกันสำหรับผู้ติดต่อแต่ละราย
หากค่าเป็น
1
ขนาดที่รายงานจะถูกหารด้วยจำนวนผู้ติดต่อก่อนใช้งานหากค่าเป็น
0
ขนาดที่รายงานจะถูกใช้ตามที่เป็นอยู่
ค่าเริ่มต้นคือ 0
อุปกรณ์ระบบสัมผัสบางประเภท โดยเฉพาะอุปกรณ์ "Semi-MT" ไม่สามารถแยกแยะขนาดแต่ละส่วนของหน้าสัมผัสหลายรายการได้ จึงรายงานการวัดขนาดที่แสดงถึงพื้นที่หรือความกว้างทั้งหมด คุณสมบัตินี้ควรตั้งค่าเป็น 1
เท่านั้นสำหรับอุปกรณ์ดังกล่าว หากมีข้อสงสัย ให้ตั้งค่านี้เป็น 0
การคำนวณ
การคำนวณ touchMajor
, touchMinor
, toolMajor
, toolMinor
และ size
จะขึ้นอยู่กับพารามิเตอร์การสอบเทียบที่ระบุ
If raw.touchMajor and raw.toolMajor are available: touchMajor = raw.touchMajor touchMinor = raw.touchMinor toolMajor = raw.toolMajor toolMinor = raw.toolMinor Else If raw.touchMajor is available: toolMajor = touchMajor = raw.touchMajor toolMinor = touchMinor = raw.touchMinor Else If raw.toolMajor is available: touchMajor = toolMajor = raw.toolMajor touchMinor = toolMinor = raw.toolMinor Else touchMajor = toolMajor = 0 touchMinor = toolMinor = 0 size = 0 End If size = avg(touchMajor, touchMinor) If touch.size.isSummed == 1: touchMajor = touchMajor / numberOfActiveContacts touchMinor = touchMinor / numberOfActiveContacts toolMajor = toolMajor / numberOfActiveContacts toolMinor = toolMinor / numberOfActiveContacts size = size / numberOfActiveContacts End If If touch.size.calibration == "none": touchMajor = toolMajor = 0 touchMinor = toolMinor = 0 size = 0 Else If touch.size.calibration == "geometric": outputScale = average(output.width / raw.width, output.height / raw.height) touchMajor = touchMajor * outputScale touchMinor = touchMinor * outputScale toolMajor = toolMajor * outputScale toolMinor = toolMinor * outputScale Else If touch.size.calibration == "area": touchMajor = sqrt(touchMajor) touchMinor = touchMajor toolMajor = sqrt(toolMajor) toolMinor = toolMajor Else If touch.size.calibration == "diameter": touchMinor = touchMajor toolMinor = toolMajor End If If touchMajor != 0: output.touchMajor = touchMajor * touch.size.scale + touch.size.bias Else output.touchMajor = 0 End If If touchMinor != 0: output.touchMinor = touchMinor * touch.size.scale + touch.size.bias Else output.touchMinor = 0 End If If toolMajor != 0: output.toolMajor = toolMajor * touch.size.scale + touch.size.bias Else output.toolMajor = 0 End If If toolMinor != 0: output.toolMinor = toolMinor * touch.size.scale + touch.size.bias Else output.toolMinor = 0 End If output.size = size
สนามความดัน
สนาม pressure
จะอธิบายแรงกดทางกายภาพโดยประมาณที่ใช้กับอุปกรณ์สัมผัสเป็นค่าปกติระหว่าง 0.0 (ไม่สัมผัส) ถึง 1.0 (เต็มแรง)
แรงดันเป็นศูนย์แสดงว่าเครื่องมือกำลังลอยอยู่
สัมผัส ความดัน การสอบเทียบ
คำจำกัดความ: touch.pressure.calibration
= none
| physical
| amplitude
| default
ระบุชนิดของการวัดที่ใช้โดยไดรเวอร์ระบบสัมผัสเพื่อรายงานแรงกด
หากค่าเป็น
none
แสดงว่าไม่ทราบความดัน ดังนั้นจึงตั้งค่าเป็น 1.0 เมื่อสัมผัส และ 0.0 เมื่อโฮเวอร์หากค่าเป็นค่า
physical
ระบบจะถือว่าแกนความดันวัดความเข้มทางกายภาพตามจริงของแรงกดที่จ่ายให้กับทัชแพดหากค่าเป็น
amplitude
แกนความดันจะถูกถือว่าเพื่อวัดแอมพลิจูดของสัญญาณ ซึ่งสัมพันธ์กับขนาดของหน้าสัมผัสและแรงกดที่ใช้หากค่าเป็นค่า
default
ระบบจะใช้การสอบเทียบphysical
หากมีแกนความดันพร้อมใช้none
ฉะนั้นจะไม่ใช้เลย
สัมผัส ความดัน สเกล
คำจำกัดความ: touch.pressure.scale
= <a หมายเลขจุดลอยตัวที่ไม่ใช่เชิงลบ>
ระบุปัจจัยสเกลคงที่ที่ใช้ในการสอบเทียบ
ค่าเริ่มต้นคือ 1.0 / raw.pressure.max
การคำนวณ
การคำนวณฟิลด์ pressure
อยู่กับพารามิเตอร์การสอบเทียบที่ระบุ
If touch.pressure.calibration == "physical" or "amplitude": output.pressure = raw.pressure * touch.pressure.scale Else If hovering: output.pressure = 0 Else output.pressure = 1 End If End If
การปฐมนิเทศและทุ่งเอียง
สนาม orientation
อธิบายการวางแนวของการสัมผัสและเครื่องมือเป็นการวัดเชิงมุม การวางแนวของ 0
บ่งชี้ว่าแกนหลักอยู่ในแนวตั้ง -PI/2
บ่งชี้ว่าแกนหลักนั้นมุ่งเน้นไปทางซ้าย PI/2
บ่งชี้ว่าแกนหลักนั้นมุ่งเน้นไปทางขวา เมื่อมีเครื่องมือสไตลัสช่วงการวางแนวสามารถอธิบายได้ในช่วงวงกลมเต็มรูปแบบตั้งแต่ -PI
หรือ PI
สนาม tilt
อธิบายถึงความโน้มเอียงของเครื่องมือเป็นการวัดเชิงมุม ความเอียงของ 0
บ่งชี้ว่าเครื่องมือตั้งฉากกับพื้นผิว ความเอียงของ PI/2
บ่งชี้ว่าเครื่องมือนั้นแบนบนพื้นผิว
touch.orientation.calibration
คำจำกัดความ: touch.orientation.calibration
= none
| interpolated
| vector
| default
ระบุชนิดของการวัดที่ใช้โดยไดรเวอร์สัมผัสเพื่อรายงานการวางแนว
- หาก
none
ค่าการวางแนวจะไม่เป็นที่รู้จักดังนั้นจึงถูกตั้งค่าเป็น 0 - หากค่า
interpolated
แนวจะถูกแก้ไขเชิงเส้นเพื่อให้ค่าดิบของraw.orientation.min
แผนที่ไปที่-PI/2
และค่าดิบของraw.orientation.max
แผนที่ไปยังPI/2
ค่ากลางของ(raw.orientation.min + raw.orientation.max) / 2
แผนที่ถึง0
- หากค่าเป็น
vector
การวางแนวจะถูกตีความว่าเป็นเวกเตอร์บรรจุโดยพิจารณาจากสองฟิลด์ 4 บิตที่ลงนาม การเป็นตัวแทนนี้ใช้กับชิ้นส่วนโปรโตคอลที่ใช้วัตถุ ATMEL เมื่อถอดรหัสเวกเตอร์จะให้มุมการวางแนวและขนาดความมั่นใจ ขนาดความเชื่อมั่นใช้ในการปรับขนาดข้อมูลขนาดเว้นแต่จะเป็นเรขาคณิต - หากค่าเป็นค่า
default
ระบบจะใช้การสอบเทียบinterpolated
หากแกนการวางทิศทางที่มีอยู่มิฉะนั้นจะใช้none
การคำนวณ
การคำนวณฟิลด์ orientation
และ tilt
อยู่กับพารามิเตอร์การสอบเทียบที่ระบุและอินพุตที่มีอยู่
If touch.tiltX and touch.tiltY are available: tiltXCenter = average(raw.tiltX.min, raw.tiltX.max) tiltYCenter = average(raw.tiltY.min, raw.tiltY.max) tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180 tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180 output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle)) output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle)) Else If touch.orientation.calibration == "interpolated": center = average(raw.orientation.min, raw.orientation.max) output.orientation = PI / (raw.orientation.max - raw.orientation.min) output.tilt = 0 Else If touch.orientation.calibration == "vector": c1 = (raw.orientation & 0xF0) >> 4 c2 = raw.orientation & 0x0F If c1 != 0 or c2 != 0: If c1 >= 8 Then c1 = c1 - 16 If c2 >= 8 Then c2 = c2 - 16 angle = atan2(c1, c2) / 2 confidence = sqrt(c1*c1 + c2*c2) output.orientation = angle If touch.size.calibration == "diameter" or "area": scale = 1.0 + confidence / 16 output.touchMajor *= scale output.touchMinor /= scale output.toolMajor *= scale output.toolMinor /= scale End If Else output.orientation = 0 End If output.tilt = 0 Else output.orientation = 0 output.tilt = 0 End If If orientation aware: If screen rotation is 90 degrees: output.orientation = output.orientation - PI / 2 Else If screen rotation is 270 degrees: output.orientation = output.orientation + PI / 2 End If End If
ระยะไกล
สนาม distance
อธิบายระยะห่างระหว่างเครื่องมือและพื้นผิวอุปกรณ์สัมผัส ค่า 0.0 หมายถึงการสัมผัสโดยตรงและค่าที่ใหญ่กว่าบ่งบอกถึงระยะทางที่เพิ่มขึ้นจากพื้นผิว
touch.distance.calibration
คำจำกัดความ: touch.distance.calibration
= none
| scaled
default
ระบุชนิดของการวัดที่ใช้โดยไดรเวอร์สัมผัสเพื่อรายงานระยะทาง
หาก
none
ค่าไม่ทราบระยะทางดังนั้นจึงถูกตั้งค่าเป็น 0หากค่าถูก
scaled
ระยะที่รายงานจะถูกคูณด้วยปัจจัยสเกลคงที่หากค่าเป็นค่า
default
ระบบจะใช้การสอบเทียบscaled
หากแกนระยะทางที่มีอยู่มิฉะนั้นจะใช้none
touch.distance.scale
คำจำกัดความ: touch.distance.scale
= <a หมายเลขจุดลอยตัวที่ไม่ใช่เชิงลบ>
ระบุปัจจัยสเกลคงที่ที่ใช้ในการสอบเทียบ
ค่าเริ่มต้นคือ 1.0
การคำนวณ
การคำนวณของฟิลด์ distance
อยู่กับพารามิเตอร์การสอบเทียบที่ระบุ
If touch.distance.calibration == "scaled": output.distance = raw.distance * touch.distance.scale Else output.distance = 0 End If
ตัวอย่าง
# Input device configuration file for a touch screen that supports pressure, # size and orientation. The pressure and size scale factors were obtained # by measuring the characteristics of the device itself and deriving # useful approximations based on the resolution of the touch sensor and the # display. # # Note that these parameters are specific to a particular device model. # Different parameters need to be used for other devices. # Basic Parameters touch.deviceType = touchScreen touch.orientationAware = 1 # Size # Based on empirical measurements, we estimate the size of the contact # using size = sqrt(area) * 28 + 0. touch.size.calibration = area touch.size.scale = 28 touch.size.bias = 0 touch.size.isSummed = 0 # Pressure # Driver reports signal strength as pressure. # # A normal index finger touch typically registers about 80 signal strength # units although we don't expect these values to be accurate. touch.pressure.calibration = amplitude touch.pressure.scale = 0.0125 # Orientation touch.orientation.calibration = vector
หมายเหตุความเข้ากันได้
คุณสมบัติการกำหนดค่าสำหรับอุปกรณ์สัมผัสมีการเปลี่ยนแปลงอย่างมีนัยสำคัญในแซนวิชไอศกรีม Android 4.0 ไฟล์การกำหนดค่าอุปกรณ์อินพุตทั้งหมดสำหรับอุปกรณ์สัมผัสจะต้องได้รับการอัปเดตเพื่อใช้คุณสมบัติการกำหนดค่าใหม่
ไดรเวอร์ อุปกรณ์สัมผัสที่เก่ากว่าอาจต้องได้รับการปรับปรุง
ไฟล์แผนที่คีย์เสมือนจริง
อุปกรณ์สัมผัสมักใช้เพื่อใช้คีย์เสมือนจริง
มีหลายวิธีในการทำเช่นนี้ขึ้นอยู่กับความสามารถของคอนโทรลเลอร์ Touch ตัวควบคุมแบบสัมผัสบางตัวสามารถกำหนดค่าโดยตรงเพื่อใช้คีย์ซอฟต์โดยการตั้งค่าการลงทะเบียนเฟิร์มแวร์ บางครั้งก็เป็นที่พึงปรารถนาที่จะทำการแมปจากพิกัดแบบสัมผัสไปยังรหัสคีย์ในซอฟต์แวร์
เมื่อมีการใช้คีย์เสมือนจริงในซอฟต์แวร์เคอร์เนลจะต้องส่งออกไฟล์แผนที่คีย์เสมือนจริงที่เรียกว่า virtualkeys.<devicename>
เป็นคุณสมบัติบอร์ด ตัวอย่างเช่นหากไดรเวอร์อุปกรณ์หน้าจอสัมผัสรายงานชื่อเป็น "touchyfeely" ไฟล์แผนที่คีย์เสมือนต้องมี path /sys/board_properties/virtualkeys.touchyfeely
ไฟล์แผนที่คีย์เสมือนจริงอธิบายถึงพิกัดและรหัสคีย์ Linux ของปุ่มเสมือนจริงบนหน้าจอสัมผัส
นอกเหนือจากไฟล์แผนที่คีย์เสมือนต้องมีไฟล์เค้าโครงคีย์ที่สอดคล้องกันและไฟล์แผนที่อักขระคีย์เพื่อแมปรหัสคีย์ Linux กับรหัสคีย์ Android และเพื่อระบุประเภทของอุปกรณ์คีย์บอร์ด (โดยปกติจะ SPECIAL_FUNCTION
)
ไวยากรณ์
ไฟล์แผนที่คีย์เสมือนเป็นไฟล์ข้อความธรรมดาที่ประกอบด้วยลำดับของคำอธิบายเค้าโครงคีย์เสมือนจริงทั้งคั่นด้วย newLines หรือโดย colons
บรรทัดความคิดเห็นเริ่มต้นด้วย '#' และดำเนินการต่อไปยังจุดสิ้นสุดของบรรทัด
แต่ละคีย์เสมือนจริงอธิบายโดย 6 ส่วนประกอบที่คั่นด้วยลำไส้ใหญ่:
-
0x01
: รหัสเวอร์ชัน ต้องเป็น0x01
เสมอ - <รหัสคีย์ Linux>: รหัสคีย์ Linux ของคีย์เสมือน
- <Centerx>: พิกเซล X พิกัดของศูนย์กลางของคีย์เสมือนจริง
- <Centery>: พิกเซล y พิกัดของศูนย์กลางของคีย์เสมือนจริง
- <Vidth>: ความกว้างของคีย์เสมือนจริงในพิกเซล
- <ความสูง>: ความสูงของคีย์เสมือนจริงในพิกเซล
มีการระบุพิกัดและขนาดทั้งหมดในแง่ของระบบพิกัดการแสดงผล
นี่คือไฟล์แผนที่คีย์เสมือนทั้งหมดที่เขียนในบรรทัดเดียว
# All on one line 0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55
ไฟล์แผนที่คีย์เสมือนเดียวกันสามารถเขียนได้หลายบรรทัด
# One key per line 0x01:158:55:835:90:55 0x01:139:172:835:125:55 0x01:102:298:835:115:55 0x01:217:412:835:95:55
ในตัวอย่างด้านบนหน้าจอสัมผัสมีความละเอียด 480x800 ดังนั้นคีย์เสมือนทั้งหมดทั้งหมดมี <Centery> พิกัด 835 ซึ่งต่ำกว่าพื้นที่ที่มองเห็นได้เล็กน้อยของหน้าจอสัมผัส
คีย์แรกมีรหัสสแกน Linux ที่ 158
( KEY_BACK
), centerx จาก 55
, ศูนย์กลางของ 835
, ความกว้าง 90
, และความสูง 55
ตัวอย่าง
ไฟล์แผนที่คีย์เสมือนจริง: /sys/board_properties/virtualkeys.touchyfeely
0x01:158:55:835:90:55 0x01:139:172:835:125:55 0x01:102:298:835:115:55 0x01:217:412:835:95:55
ไฟล์เค้าโครงคีย์: /system/usr/keylayout/touchyfeely.kl
key 158 BACK key 139 MENU key 172 HOME key 217 SEARCH
ไฟล์แผนที่อักขระคีย์: /system/usr/keychars/touchyfeely.kcm
type SPECIAL_FUNCTION
ท่าทางตัวชี้แบบมัลติทัชทางอ้อม
ในโหมดตัวชี้ระบบจะตีความท่าทางต่อไปนี้:
- แตะนิ้วเดียว: คลิก
- การเคลื่อนไหวนิ้วเดี่ยว: เลื่อนตัวชี้
- ปุ่ม Motion Plus Single Plus กด: ลากตัวชี้
- การเคลื่อนไหวสองนิ้วทั้งสองนิ้วเคลื่อนที่ไปในทิศทางเดียวกัน: ลากพื้นที่ใต้ตัวชี้ไปในทิศทางนั้น ตัวชี้นั้นไม่เคลื่อนไหว
- การเคลื่อนไหวสองนิ้วทั้งสองนิ้วเคลื่อนที่เข้าหากันหรือแยกออกจากกันในทิศทางที่แตกต่างกัน: แพน/สเกล/หมุนบริเวณรอบตัวชี้ ตัวชี้นั้นไม่เคลื่อนไหว
- การเคลื่อนไหวหลายนิ้ว: ท่าทางฟรีฟอร์ม
การปฏิเสธปาล์ม
ในขณะที่ Android 13 ระบบสามารถปฏิเสธอินพุตจาก Palms โดยอัตโนมัติเมื่อเปิดใช้งานเฟรมเวิร์กในตัว ยังคงรองรับโซลูชันที่สร้างขึ้นเองใน บริษัท แม้ว่าพวกเขาอาจจำเป็นต้องแก้ไขเพื่อส่งคืนธง TOOL_TYPE_PALM
เมื่อตรวจพบฝ่ามือ เฟรมเวิร์กในตัวยังทำงานร่วมกับโซลูชั่นที่กำหนดเอง
โมเดลที่แท้จริงจะดูที่ข้อมูลท่าทาง 90 มิลลิวินาทีแรกที่ตัวชี้ปัจจุบันและที่พอยน์เตอร์โดยรอบจากนั้นพิจารณาว่าไกลจากขอบจอแสดงผลที่สัมผัส จากนั้นจะกำหนดบนพื้นฐานต่อตัวชี้ซึ่งเป็นพอยน์เตอร์ซึ่งเป็นฝ่ามือ นอกจากนี้ยังคำนึงถึงขนาดของการติดต่อแต่ละครั้งตามที่รายงานโดย touchMajor
และ touchMinor
เฟรมเวิร์ก Android จากนั้นจะลบพอยน์เตอร์ที่ถูกทำเครื่องหมายว่าเป็นฝ่ามือจากกระแสสัมผัส
หากตัวชี้ถูกส่งไปยังแอพแล้วระบบก็เช่นกัน:
- (หากมีพอยน์เตอร์ที่ใช้งานอยู่อื่น ๆ ) ยกเลิกตัวชี้ด้วยชุด
ACTION_POINTER_UP
และชุดFLAG_CANCELED
- (ถ้านี่เป็นตัวชี้เดียว) ยกเลิกตัวชี้ด้วย
ACTION_CANCEL
API สาธารณะ, MotionEvent.FLAG_CANCELED
ระบุว่าเหตุการณ์ปัจจุบันไม่ควรกระตุ้นการกระทำของผู้ใช้ ตั้งค่าสถานะนี้สำหรับทั้ง ACTION_CANCEL
และ ACTION_POINTER_UP
หากตัวชี้ปาล์มไม่ได้ส่งไปยังแอพแล้วระบบก็จะลดลงตัวชี้
เปิดใช้งานการปฏิเสธปาล์ม
- ในไดรเวอร์แบบสัมผัสของคุณใช้ แมโคร
input_abs_set_res
เพื่อตั้งค่าความละเอียดสำหรับฟิลด์ต่อไปนี้ (หน่วยเป็น พิกเซลต่อมม .):-
ABS_MT_POSITION_X
-
ABS_MT_POSITION_Y
-
ABS_MT_TOUCH_MAJOR
-
ABS_MT_TOUCH_MINOR
รองรับ
ABS_MT_TOUCH_MINOR
เป็นทางเลือก อย่างไรก็ตามหากอุปกรณ์ของคุณรองรับตรวจสอบให้แน่ใจว่ามีการตั้งค่าความละเอียดอย่างถูกต้อง -
- เพื่อยืนยันว่าฟิลด์ถูกตั้งค่าอย่างถูกต้องให้เรียกใช้:
$ adb shell getevent -li
- หากต้องการเปิดใช้งานคุณสมบัติในระหว่างการรันไทม์ Run:
$ adb shell device_config put input_native_boot palm_rejection_enabled 1
- รีสตาร์ทกระบวนการ
system_server
$ adb shell stop && adb shell start
- ยืนยันว่า
adb shell dumpsys input
แสดงให้เห็นว่ามีการปฏิเสธของ Palm ภายในUnwantedInteractionBlocker
หากไม่ได้ตรวจสอบบันทึกที่เกี่ยวข้องกับอินพุตเพื่อค้นหาเบาะแสเกี่ยวกับสิ่งที่อาจถูกกำหนดค่าผิดพลาดดูตัวอย่างต่อไปนี้สำหรับการอ้างอิง:
UnwantedInteractionBlocker: mEnablePalmRejection: true isPalmRejectionEnabled (flag value): true mPalmRejectors: deviceId = 3: mDeviceInfo: max_x =
max_y = x_res = 11.00 y_res = 11.00 major_radius_res = 1.00 minor_radius_res = 1.00 minor_radius_supported = true touch_major_res = 1 touch_minor_res = 1 mSlotState: mSlotsByPointerId: mPointerIdsBySlot: mSuppressedPointerIds: {} - หากต้องการเปิดใช้งานคุณสมบัติอย่างถาวรให้เพิ่มคำสั่ง sysprop ที่เกี่ยวข้องในไฟล์
init**rc
ของคุณ:setprop persist.device_config.input_native_boot.palm_rejection_enabled 1