輸入路由

在 Android 9 以下版本中,無法與多個螢幕互動 系統並未提供螢幕和輸入之間的關聯機制。 裝置。舉例來說,觸控螢幕顯示器可提供 HDMI 影片輸出 (會在 Android 上註冊為顯示器),以及觸控螢幕的 USB 輸出 (會註冊為輸入裝置)。如果以這種方式連接多部裝置,就無法判斷哪個輸入裝置屬於哪個螢幕。同樣的問題也適用於內建多個螢幕的摺疊式裝置。

Android 10 新增了機制,用於指定 裝置都屬於這個螢幕關聯是透過通訊埠號碼完成, port 是指螢幕所連接的實體通訊埠。

舉例來說,假設 Android 裝置有兩個標示為 hdmi1 的 HDMI 連接埠。 和 hdmi2,則螢幕通訊埠值可能是 12。即使不同螢幕顯示 (例如不同的顯示型號或製造商) 連上相同的實體 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 屬性。

adb shell dumpsys input

如果有多部裝置已連線,請輕觸特定裝置,檢查輸入調度器狀態中的 RecentQueue 陣列。接著,您可以找出產生最近事件的裝置。接著,您可以在事件中樞狀態中找到對應的裝置。

如要判斷指派給已連結螢幕的顯示連接埠,請使用 adb shell dumpsys display,然後尋找 address 屬性為 DisplayDeviceInfo。 或者,您也可以使用 adb shell dumpsys SurfaceFlinger --display-id 轉儲所有已連線顯示器的識別資訊。其他參考資訊 靜態顯示 ID

如果您為特定輸入裝置指定關聯,但系統中沒有對應的顯示畫面,輸入裝置會停用,直到顯示畫面出現為止。關聯作業僅適用於觸控裝置。

動態多螢幕轉送

在 Android 10 中,你可以設定靜態多螢幕 裝置。動態關聯尚未啟用。不過,您可以為不一定會出現或使用虛擬輸入裝置的螢幕和輸入面板提供路由資訊,然後為這些虛擬裝置提供額外的路由資訊,以解決某些用途。如果裝置實作項目支援以下項目:

  • 使用類似電腦的體驗,搭配擴充座,然後提供路由設定,將從連接至擴充座的輸入配件 (透過通訊埠獨立識別) 的目標輸入,傳送至外接螢幕 (透過通訊埠識別)。
  • 連線時做為輸入來源的主畫面 (例如觸控板) 連至外部螢幕,即可提供轉送設定給目標輸入 從虛擬觸控面板 (以專屬虛擬 ID 識別) 到外部螢幕 (透過通訊埠識別)。

實作

  • 對於實體裝置,輸入裝置連接的連接埠和螢幕連接的連接埠,用於將螢幕與觸控螢幕配對。
  • 對應關係會儲存在 InputReaderConfiguration 中。
  • TouchInputMapper.mViewport」已設為符合 為 InputDevice.location 指定的通訊埠。
  • 如果對應檔案中指定了輸入裝置的通訊埠,而 目前沒有符合顯示通訊埠的可視區域,那麼 裝置的通訊埠已停用。
  • 如果未為特定輸入裝置指定通訊埠,系統會根據現有規則設定視區。
  • 輸入驅動程式不需要進行任何核心變更。
  • 輸入裝置連接埠是由 EVIOCGPHYS ioctl 決定。