Giriş yönlendirme

Android 9 ve önceki sürümlerde, ekranlar ile giriş cihazları arasında ilişkilendirme mekanizması olmadığından birden fazla ekranla dokunma yoluyla etkileşim kurmak mümkün değildi. Örneğin, dokunmatik ekranlı bir ekran; HDMI video çıkışı (Android'de ekran olarak kaydedilir) ve dokunmatik ekran için USB çıkışı (giriş cihazı olarak kaydedilir) sağlayabilir. Bu şekilde birden fazla cihaz bağlanırsa hangi giriş cihazının hangi ekrana ait olduğunu belirlemek mümkün olmaz. Aynı sorun, birden fazla yerleşik ekrana sahip katlanabilir cihazlar için de geçerlidir.

Android 10, hangi giriş cihazlarının hangi ekranlara ait olduğunu belirtmek için bir mekanizma ekledi. İlişkilendirme, bağlantı noktası numaralarıyla yapılır. Bağlantı noktası, bir ekranın bağlı olduğu fiziksel bağlantı noktasını belirtir.

Örneğin, bir Android cihazda hdmi1 ve hdmi2 etiketli iki HDMI bağlantı noktası varsa DisplayPort değerleri 1 ve 2 olabilir. Aynı fiziksel HDMI bağlantı noktasına farklı bir ekran (ör. farklı ekran modeli veya üretici) bağlansa bile bağlantı noktası değerleri aynı kalır. Bu sayede cihaz üreticileri, ekranları birleştirme ve yükseltme talimatları sağlayabilir.

İlişkilendirme /vendor/etc/input-port-associations.xml'te yapılandırılmıştır. Örnek:

<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>

Yukarıdaki örnekte display="0", ekranın bağlı olduğu bağlantı noktasını belirtir. input="usb-xhci-hcd.0.auto-1.1/input0" giriş cihazının bağlı olduğu bağlantı noktasını belirtir. Belirli cihazlarla ilişkili bağlantı noktalarını belirlemek için aşağıdaki terminal komutunu kullanın ve ardından Event Hub State'te bu cihazların location mülkünü inceleyin.

adb shell dumpsys input

Çok sayıda cihaz bağlıysa belirli bir cihaza dokunarak Giriş Gönderici Durumundaki RecentQueue dizisini inceleyin. Ardından, en son etkinliği oluşturan cihazları belirleyebilirsiniz. İlgili cihazı Event Hub State'te bulabilirsiniz.

Bağlı ekranlara atanan ekran bağlantı noktalarını belirlemek için adb shell dumpsys display'ü kullanın ve ardından Ekran Cihazları altında her ekran için DisplayDeviceInfo mülkündeki address mülkünü bulun. Alternatif olarak, tüm bağlı ekranlar için kimlik bilgilerini dökümü almak üzere adb shell dumpsys SurfaceFlinger --display-id işlevini kullanın. Statik görüntülü reklam tanımlayıcıları başlıklı makaleyi de inceleyin.

Belirli bir giriş cihazı için ilişkilendirme belirtirseniz ve ilgili ekran sistemde mevcut değilse giriş cihazı ilgili ekran görüntüleninceye kadar devre dışı bırakılır. İlişkilendirme yalnızca dokunmatik cihazlar için gerçekleştirilir.

Dinamik çoklu ekranlar için yönlendirme

Android 10, statik çoklu ekranlı cihazları kurabilmenizi sağlar. Dinamik ilişkilendirmeler henüz etkinleştirilmedi. Ancak bazı kullanım alanları, her zaman mevcut olmayan ekranlar ve giriş panelleri için yönlendirme bilgileri sağlayarak veya sanal giriş cihazları kullanarak ve ardından bu sanal cihazlara ek yönlendirme bilgileri sağlayarak ele alınabilir. Cihaz uygulaması şunları destekliyorsa:

  • Yerleşik istasyonla masaüstü benzeri bir deneyim, ardından bağlantı noktasına bağlı giriş aksesuarından (bağlantı noktasına göre benzersiz şekilde tanımlanır) harici ekrana (bağlantı noktasına göre tanımlanır) girişi hedeflemek için bir yönlendirme yapılandırması sağlanabilir.
  • Birincil ekran, harici ekrana bağlıyken giriş kaynağı (ör. dokunmatik yüzey) olarak hareket eder. Ardından, sanal dokunmatik panelden (benzersiz sanal kimlikle tanımlanır) harici ekrana (bağlantı noktasıyla tanımlanır) girişi hedeflemek için bir yönlendirme yapılandırması sağlanabilir.

Uygulama

  • Fiziksel cihazlarda, ekranları dokunmatik ekranlarla eşleştirmek için giriş cihazının bağlı olduğu bağlantı noktası ve ekranın bağlı olduğu bağlantı noktası kullanılır.
  • Eşlemeler InputReaderConfiguration içinde depolanır.
  • TouchInputMapper.mViewport, InputDevice.location için belirtilen bağlantı noktasıyla eşleşen görüntü alanına ayarlanır.
  • Eşleme dosyasında bir giriş cihazı bağlantı noktası belirtildiyse ve şu anda eşleşen bir görüntü bağlantı noktasına sahip bir görüntü alanı yoksa bu bağlantı noktasındaki giriş cihazı devre dışı bırakılır.
  • Belirli bir giriş cihazı için bağlantı noktası belirtilmemişse görüntü alanı mevcut kurallara göre ayarlanır.
  • Giriş sürücülerinde çekirdek değişikliği gerekmez.
  • Giriş cihazı bağlantı noktaları, EVIOCGPHYS ioctl kullanılarak belirlenir.