У меня есть приложение 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
}
Что работает:
Код: Выделить всё
adb shell input -d tap
- Беспроводные контроллеры
- Беспроводные клавиатуры
- Беспроводные/проводные мыши (курсор касается краев экрана телефона, никогда не попадает на виртуальный дисплей/ Экран внешнего дисплея)
- Сенсорный (см. скриншот)
Вывод 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