Android 10 вводит входные данные на внешний дисплей/виртуальный дисплейAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android 10 вводит входные данные на внешний дисплей/виртуальный дисплей

Сообщение Anonymous »

Идея:
У меня есть приложение Android, написанное на Kotlin, которое просто запускает приложение Android на внешнем дисплее. В качестве дисплея может использоваться AirServer, Miracast, Microsoft Connect, USB-OTG HDMI, USB-C HDMI или имитация вторичного дисплея (см. снимок экрана).
Вот за исключением кода, который выполняет «тяжелую работу»:

Код: Выделить всё

        val intent = packageManager.getLaunchIntentForPackage(info.id)
val dm = recyclerView.context.getSystemService(Service.DISPLAY_SERVICE) as DisplayManager
val displays = dm.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION)

for (display in displays) {
val options = ActivityOptions.makeBasic()
options.launchDisplayId = display.displayId
recyclerView.context.startActivity(intent, options.toBundle())
break
}
Приложения запускаются нормально. Смотрите скриншот, где я использовал его для запуска Minecraft Pocket Edition на имитированном вторичном дисплее (как если бы был подключен внешний монитор HDMI). Проблема в том, что Я не могу отправлять сенсорные данные или действия курсора на виртуальные дисплеи.
Что работает:
  • Код: Выделить всё

    adb shell input -d  tap  
  • Беспроводные контроллеры
  • Беспроводные клавиатуры
< strong>Что не работает:
  • Беспроводные/проводные мыши (курсор касается краев экрана телефона, никогда не попадает на виртуальный дисплей/ Экран внешнего дисплея)
  • Сенсорный (см. скриншот)
Что я пробовал:
Вывод dumpsys display показывает, что всем виртуальным дисплеям не хватает сенсорного параметра VIRTUAL, который есть у внутреннего дисплея. Я не уверен, означает ли это, что сам дисплей не поддерживает ввод с помощью сенсорного экрана, или он просто не включен.
Я попробовал перевести приложение на передний план, в результате чего приложения обнаруживать ввод с клавиатуры и контроллера, но курсор по-прежнему был привязан к окну внутреннего дисплея.
Стоит отметить, что в настройках разработчика режима рабочего стола Android 10 ДАЕТ курсор на внешний дисплей вместо внутреннего дисплея. Это то, чего я пытаюсь достичь.
Похоже, что в Android SDK есть скрытый Java API:
https://github.com/aosp-mirror/platform ... e.cpp#L825
Я пытался получить доступ к этому класс через отражение и вызовите setFocusedDisplay, но я продолжал получать исключения ClassNotFound, даже несмотря на изменение настроек безопасности частного черного списка API.
Здесь мы будем благодарны за любую помощь. Единственная другая угроза, связанная с этой угрозой, находится здесь, и она так и не была решена:
События сенсорного ввода Android Q VirtualDisplay
Изображение


Подробнее здесь: https://stackoverflow.com/questions/633 ... al-display
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»