輸入轉送

在 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 決定。