ใน Android 9 และต่ำกว่า ไม่มีวิธีโต้ตอบกับจอแสดงผลหลายจอ ผ่านการสัมผัส เนื่องจากไม่มีกลไกการเชื่อมโยงระหว่างจอแสดงผลและอินพุต อุปกรณ์ เช่น หน้าจอสัมผัสอาจมีเอาต์พุตวิดีโอ HDMI (ที่จะลงทะเบียนเป็นจอแสดงผลใน Android) และเอาต์พุต USB สำหรับหน้าจอสัมผัส (ซึ่งจะลงทะเบียนเป็นอุปกรณ์อินพุต) หากมีอุปกรณ์หลายเครื่องเชื่อมต่อกัน ในลักษณะนี้ จะไม่มีทางระบุได้ว่าอุปกรณ์อินพุตใดเป็นของอุปกรณ์อินพุตใด จอแสดงผลไหน ปัญหาเดียวกันกับอุปกรณ์แบบพับได้ที่มีในตัวหลายเครื่อง จอแสดงผล
Android 10 เพิ่มกลไกในการระบุว่าอินพุตใด เป็นของจอแสดงผลใด การเชื่อมโยงจะดําเนินการโดยหมายเลขพอร์ต พอร์ต หมายถึงพอร์ตที่มีการเชื่อมต่อกับจอแสดงผล
เช่น หากอุปกรณ์ Android มีพอร์ต HDMI 2 พอร์ตที่มีป้ายกำกับว่า hdmi1
และ hdmi2
ค่าพอร์ตที่แสดงอาจเป็น 1
และ
2
ค่าของพอร์ตจะยังคงเหมือนเดิม แม้ว่าจอแสดงผลที่ต่างกันจะเป็น
เชื่อมต่อ (เช่น รุ่นจอแสดงผลหรือผู้ผลิตรายอื่น) กับอุปกรณ์เดียวกัน
พอร์ต HDMI ซึ่งช่วยให้ผู้ผลิตอุปกรณ์สามารถบอกวิธีการประกอบ
และอัปเกรดจอแสดงผล
มีการกำหนดค่าการเชื่อมโยงใน /vendor/etc/input-port-associations.xml
เช่น
<ports>
<port display="0" input="usb-xhci-hcd.0.auto-1.1/input0" />
<port display="1" input="usb-xhci-hcd.0.auto-1.2/input0" />
</ports>
ในตัวอย่างด้านบน display="0"
จะระบุพอร์ตที่
เชื่อมต่อจอแสดงผลแล้ว input="usb-xhci-hcd.0.auto-1.1/input0"
ระบุพอร์ตที่อุปกรณ์อินพุตเชื่อมต่ออยู่ วิธีระบุพอร์ต
โดยใช้คำสั่งเทอร์มินัลต่อไปนี้ จากนั้น
ตรวจสอบพร็อพเพอร์ตี้ location
ของอุปกรณ์เหล่านั้นใน Event Hub State
adb shell dumpsys input
หากมีอุปกรณ์หลายเครื่องเชื่อมต่ออยู่ ให้แตะอุปกรณ์ที่ต้องการเพื่อตรวจสอบ
อาร์เรย์ RecentQueue
ในสถานะผู้จ่ายอินพุต จากนั้นคุณจะสามารถระบุ
อุปกรณ์ที่สร้างเหตุการณ์ล่าสุด จากนั้นคุณจะพบ
อุปกรณ์ที่เกี่ยวข้องใน Event Hub State
หากต้องการระบุพอร์ตจอแสดงผลที่กำหนดให้กับจอแสดงผลที่เชื่อมต่อ ให้ใช้
adb shell dumpsys display
แล้วมองหา address
ของ DisplayDeviceInfo
สำหรับการแสดงผลแต่ละรายการในส่วน "อุปกรณ์แสดงผล"
หรือใช้ adb shell dumpsys SurfaceFlinger --display-id
เพื่อถ่ายโอนข้อมูล
ข้อมูลระบุตัวตนของจอแสดงผลที่เชื่อมต่อทั้งหมด ดูเพิ่มเติม
ตัวระบุโฆษณาแบบดิสเพลย์แบบคงที่
หากคุณระบุการเชื่อมโยงสำหรับอุปกรณ์อินพุตเฉพาะ และอุปกรณ์อินพุต หน้าจอไม่ปรากฏในระบบ อุปกรณ์อินพุตจะถูกปิดจนกว่าอุปกรณ์จะ จอแสดงผลจะปรากฏขึ้น การเชื่อมโยงจะดําเนินการสำหรับอุปกรณ์ระบบสัมผัสเท่านั้น
การกำหนดเส้นทางสำหรับหลายจอแสดงผลแบบไดนามิก
Android 10 ให้คุณตั้งค่าหลายจอแสดงผลแบบคงที่ได้ อุปกรณ์ ยังไม่ได้เปิดใช้การเชื่อมโยงแบบไดนามิก อย่างไรก็ตาม กรณีการใช้งานบางกรณีอาจ จัดการโดยการระบุข้อมูลการกำหนดเส้นทางสำหรับจอแสดงผลและแผงอินพุตที่ไม่มี แสดงหรือใช้อุปกรณ์อินพุตเสมือนเสมอ จากนั้นจะกำหนดเส้นทางเพิ่มเติม ไปยังอุปกรณ์เสมือนเหล่านั้น หากการใช้งานอุปกรณ์รองรับ
- การใช้งานเหมือนเดสก์ท็อปด้วยอุปกรณ์เพิ่มพอร์ตเชื่อมต่อ อาจกำหนดค่าการกำหนดเส้นทางได้ ที่ให้ไว้กับอินพุตเป้าหมายจากอุปกรณ์เสริมอินพุตที่เชื่อมต่อกับแท่นชาร์จ (ระบุ โดยไม่ซ้ำกันตามพอร์ต) ไปยังจอแสดงผลภายนอก (ระบุโดยพอร์ต)
- หน้าจอหลักที่ทำหน้าที่เป็นแหล่งที่มาของอินพุต (เช่น ทัชแพด) เมื่อเชื่อมต่อ ไปยังจอแสดงผลภายนอก เพื่อให้สามารถระบุการกำหนดค่าการกำหนดเส้นทางให้กับอินพุตเป้าหมาย จากแผงระบบสัมผัสเสมือน (ระบุโดยรหัสเสมือนที่ไม่ซ้ำ) ไปยังจอแสดงผลภายนอก (ระบุโดยพอร์ต)
การใช้งาน
- สำหรับอุปกรณ์จริง พอร์ตที่อุปกรณ์อินพุตเชื่อมต่ออยู่และพอร์ต พอร์ตที่จอภาพเชื่อมต่ออยู่ ใช้ในการจับคู่จอแสดงผลกับหน้าจอสัมผัส
- ระบบจะจัดเก็บการแมปไว้ใน
InputReaderConfiguration
- ตั้งค่า
TouchInputMapper.mViewport
เป็นวิวพอร์ตที่ตรงกับ พอร์ตที่ระบุสำหรับInputDevice.location
- หากมีการระบุพอร์ตของอุปกรณ์อินพุตไว้ในไฟล์การแมป ไม่ใช่วิวพอร์ตที่มีพอร์ตการแสดงผลที่ตรงกัน จากนั้นอินพุต อุปกรณ์บนพอร์ตนั้นปิดอยู่
- หากไม่ได้ระบุพอร์ตสำหรับอุปกรณ์อินพุตเฉพาะ วิวพอร์ตจะเป็น ตั้งค่าตามกฎที่มีอยู่
- โดยที่คุณไม่จำเป็นต้องเปลี่ยนแปลงเคอร์เนลในไดรเวอร์อินพุต
- พอร์ตของอุปกรณ์อินพุตจะกำหนดโดยใช้ EVIOCGPHYS ioctl