Unter Android 9 und niedriger war es nicht möglich, über Touchbedienung mit mehreren Displays zu interagieren, da es keinen Verknüpfungsmechanismus zwischen Displays und Eingabegeräten gab. Ein Touchscreen-Display könnte beispielsweise einen HDMI-Videoausgang (der unter Android als Display registriert wird) und einen USB-Ausgang für den Touchscreen (der als Eingabegerät registriert wird) haben. Wenn mehrere Geräte auf diese Weise verbunden wären, könnte nicht ermittelt werden, welches Eingabegerät zu welchem Display gehört. Dasselbe Problem gilt für faltbare Geräte mit mehreren integrierten Displays.
Unter Android 10 wurde ein Mechanismus hinzugefügt, mit dem angegeben wird, welche Eingabe zu welchen Displays gehören. Die Zuordnung erfolgt über Portnummern, wobei Port sich auf den physischen Port bezieht, an den ein Display angeschlossen ist.
Wenn ein Android-Gerät beispielsweise zwei HDMI-Ports mit den Beschriftungen hdmi1
und hdmi2
hat, könnten die Displayport-Werte 1
und 2
sein. Die Portwerte bleiben gleich, auch wenn ein anderes Display (z. B. ein anderes Displaymodell oder ein anderes Herstellermodell) an denselben physischen HDMI-Port angeschlossen ist. So können Gerätehersteller Anleitungen zum Zusammenbau und zur Aufrüstung von Displays bereitstellen.
Die Verknüpfung wird in /vendor/etc/input-port-associations.xml
konfiguriert.
Beispiel:
<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>
Im obigen Beispiel gibt display="0"
den Port an, an den der
Display verbunden ist. input="usb-xhci-hcd.0.auto-1.1/input0"
gibt den Port an, mit dem das Eingabegerät verbunden ist. So ermitteln Sie die Ports:
die mit bestimmten Geräten verknüpft sind,
verwenden Sie den folgenden Terminalbefehl und
Prüfen Sie die location
-Eigenschaft dieser Geräte im Ereignis-Hub-Status.
adb shell dumpsys input
Wenn viele Geräte verbunden sind, tippen Sie auf ein bestimmtes Gerät, um die
RecentQueue
-Array im Eingabe-Dispatcher-Status. Anschließend können Sie die Geräte ermitteln, die das letzte Ereignis generiert haben. Das entsprechende Gerät finden Sie dann im Event Hub-Status.
Um die den verbundenen Displays zugewiesenen Displayports zu ermitteln, verwenden Sie adb shell dumpsys display
und suchen Sie dann unter „Displaygeräte“ für jedes Display nach der address
-Eigenschaft von DisplayDeviceInfo
.
Alternativ können Sie mit adb shell dumpsys SurfaceFlinger --display-id
die Identifikationsinformationen für alle verbundenen Displays dumpen. Siehe auch
Statische Display-IDs:
Wenn Sie eine Verknüpfung für ein bestimmtes Eingabegerät angeben und das entsprechende Display nicht im System vorhanden ist, wird das Eingabegerät deaktiviert, bis das entsprechende Display angezeigt wird. Die Verknüpfung wird nur für Touchscreen-Geräte durchgeführt.
Routing für dynamische Multi-Display-Anzeigen
Mit Android 10 können Sie statische Multi-Display-Geräte einrichten. Dynamische Verknüpfungen sind noch nicht aktiviert. Einige Anwendungsfälle können jedoch durch die Bereitstellung von Routinginformationen für Displays und Eingabefelder, immer vorhanden sind oder virtuelle Eingabegeräte verwenden, und stellen dann zusätzliche Routing-Informationen an diese virtuellen Geräte gesendet. Wenn eine Geräteimplementierung Folgendes unterstützt:
- Desktop-ähnliche Umgebung mit einer Dockingstation, könnte eine Routing-Konfiguration zur Zieleingabe vom mit dem Dock verbundenen Eingabezubehör (identifiziert) eindeutig durch Port) an den externen Bildschirm (gekennzeichnet durch Port) übertragen.
- Primärer Bildschirm, der bei Verbindung als Eingabequelle dient (z. B. Touchpad) an das externe Display an, dann kann eine Routingkonfiguration für die Zieleingabe bereitgestellt werden. vom virtuellen Touchscreen (identifiziert durch die eindeutige virtuelle ID) zum externen Display (gekennzeichnet durch Port).
Implementierung
- Bei physischen Geräten werden die Ports, an die das Eingabegerät und das Display angeschlossen sind, verwendet, um die Displays mit Touchscreens zuzuordnen.
- Die Zuordnungen werden in
InputReaderConfiguration
gespeichert. TouchInputMapper.mViewport
ist auf den Darstellungsbereich festgelegt, der mit den fürInputDevice.location
angegebenen Port.- Wenn in der Zuordnungsdatei ein Port für das Eingabegerät angegeben ist und es keinen Darstellungsbereich mit einem übereinstimmenden Displayport hat, wird die Eingabe Gerät an diesem Anschluss deaktiviert ist.
- Wenn für ein bestimmtes Eingabegerät kein Port angegeben ist, wird der Viewport gemäß den vorhandenen Regeln festgelegt.
- An den Eingabetreibern sind keine Kerneländerungen erforderlich.
- Die Eingabegeräteports werden mit dem EVIOCGPHYS-ioctl ermittelt.