ใน Android 9 และต่ำกว่า ผู้ใช้ไม่สามารถโต้ตอบกับจอแสดงผลหลายจอผ่านการสัมผัสได้ เนื่องจากไม่มีกลไกการเชื่อมโยงระหว่างจอแสดงผลกับอุปกรณ์อินพุต เช่น จอแสดงผลแบบหน้าจอสัมผัสอาจมีเอาต์พุตวิดีโอ HDMI (ซึ่งจะลงทะเบียนเป็นจอแสดงผลใน Android) และเอาต์พุต USB สำหรับหน้าจอสัมผัส (ซึ่งจะลงทะเบียนเป็นอุปกรณ์อินพุต) หากเชื่อมต่ออุปกรณ์หลายเครื่องในลักษณะนี้ จะไม่มีวิธีระบุอุปกรณ์อินพุตของจอแสดงผลแต่ละเครื่อง ปัญหาเดียวกันนี้เกิดขึ้นกับอุปกรณ์แบบพับได้ที่มีจอแสดงผลในตัวหลายจอ
Android 10 เพิ่มกลไกในการระบุอุปกรณ์อินพุตที่เป็นของจอแสดงผลใด การเชื่อมโยงจะดำเนินการตามหมายเลขพอร์ต โดยที่พอร์ตหมายถึงพอร์ตจริงที่เชื่อมต่อกับจอแสดงผล
ตัวอย่างเช่น หากอุปกรณ์ Android มีพอร์ต HDMI 2 พอร์ตที่ติดป้ายกำกับว่า hdmi1
และ hdmi2
ค่าของพอร์ต Display อาจได้แก่ 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
adb shell dumpsys input
หากมีอุปกรณ์หลายเครื่องเชื่อมต่ออยู่ ให้แตะอุปกรณ์ที่ต้องการเพื่อตรวจสอบอาร์เรย์ RecentQueue
ในสถานะตัวจัดเตรียมอินพุต จากนั้นคุณก็จะระบุอุปกรณ์เหล่านั้นที่สร้างเหตุการณ์ล่าสุดได้ จากนั้นคุณจะค้นหาอุปกรณ์ที่เกี่ยวข้องได้ในสถานะ Event Hub
หากต้องการดูพอร์ตแสดงผลที่กำหนดให้กับจอภาพที่เชื่อมต่อ ให้ใช้ adb shell dumpsys display
แล้วมองหาพร็อพเพอร์ตี้ address
ของ DisplayDeviceInfo
สำหรับจอแสดงผลแต่ละเครื่องในส่วนอุปกรณ์แสดงผล
หรือใช้ adb shell dumpsys SurfaceFlinger --display-id
เพื่อแสดงข้อมูลระบุตัวตนของจอแสดงผลที่เชื่อมต่อทั้งหมด ดูตัวระบุการแสดงผลแบบคงที่
หากคุณระบุการเชื่อมโยงสำหรับอุปกรณ์อินพุตที่เฉพาะเจาะจงและระบบไม่มีจอแสดงผลที่เกี่ยวข้อง อุปกรณ์อินพุตจะปิดอยู่จนกว่าจอแสดงผลที่เกี่ยวข้องจะปรากฏขึ้น การเชื่อมโยงจะดำเนินการกับอุปกรณ์แบบสัมผัสเท่านั้น
การกำหนดเส้นทางสำหรับจอภาพแบบหลายจอแบบไดนามิก
Android 10 ช่วยให้คุณตั้งค่าอุปกรณ์แบบหลายจอแสดงผลแบบคงที่ได้ ยังไม่ได้เปิดใช้การเชื่อมโยงแบบไดนามิก อย่างไรก็ตาม กรณีการใช้งานบางอย่างสามารถแก้ไขได้ด้วยการระบุข้อมูลการกำหนดเส้นทางสำหรับจอแสดงผลและแผงอินพุตที่ไม่ได้แสดงอยู่เสมอหรือใช้อุปกรณ์อินพุตเสมือน จากนั้นให้ข้อมูลการกำหนดเส้นทางเพิ่มเติมแก่อุปกรณ์เสมือนเหล่านั้น หากการติดตั้งใช้งานอุปกรณ์รองรับ
- ประสบการณ์การใช้งานแบบเดสก์ท็อปด้วยแท่นชาร์จแบบต่อพ่วง คุณสามารถกำหนดค่าการกำหนดเส้นทางเพื่อกำหนดเป้าหมายอินพุตจากอุปกรณ์เสริมอินพุตที่เชื่อมต่อกับแท่นชาร์จ (ระบุด้วยพอร์ตที่ไม่ซ้ำกัน) ไปยังจอแสดงผลภายนอก (ระบุด้วยพอร์ต)
- หน้าจอหลักทำหน้าที่เป็นแหล่งอินพุต (เช่น ทัชแพด) เมื่อเชื่อมต่อกับจอแสดงผลภายนอก คุณสามารถกำหนดค่าการกำหนดเส้นทางเพื่อกำหนดเป้าหมายอินพุตจากแผงสัมผัสเสมือน (ระบุด้วยรหัสเสมือนที่ไม่ซ้ำกัน) ไปยังจอแสดงผลภายนอก (ระบุด้วยพอร์ต)
การใช้งาน
- สำหรับอุปกรณ์จริง ระบบจะใช้พอร์ตที่เชื่อมต่ออุปกรณ์อินพุตและพอร์ตที่เชื่อมต่อจอแสดงผลเพื่อจับคู่จอแสดงผลกับหน้าจอสัมผัส
- ระบบจะจัดเก็บการแมปไว้ใน
InputReaderConfiguration
TouchInputMapper.mViewport
ได้รับการตั้งค่าเป็นวิวพอร์ตที่ตรงกับพอร์ตที่ระบุสำหรับInputDevice.location
- หากระบุพอร์ตอุปกรณ์อินพุตในไฟล์การแมป และปัจจุบันไม่มีวิวพอร์ตที่มีพอร์ตจอแสดงผลที่ตรงกัน ระบบจะปิดใช้อุปกรณ์อินพุตในพอร์ตนั้น
- หากไม่ได้ระบุพอร์ตสำหรับอุปกรณ์อินพุตหนึ่งๆ ระบบจะตั้งค่าวิวพอร์ตตามกฎที่มีอยู่
- โดยไม่จำเป็นต้องทำการเปลี่ยนแปลงเคอร์เนลในไดรเวอร์อินพุต
- พอร์ตอุปกรณ์อินพุตจะกำหนดโดยใช้ ioctl EVIOCGPHYS