gpt4 book ai didi

Android 10 向外部显示器/虚拟显示器注入(inject)输入

转载 作者:行者123 更新时间:2023-12-04 17:25:54 25 4
gpt4 key购买 nike

理念:
我有一个用 Kotlin 编写的 Android 应用程序,它只是在外部显示器上启动一个 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 <display-id> tap <x> <y>
  • 无线 Controller
  • 无线键盘

  • 什么不起作用:
  • 无线/有线鼠标(光标碰到手机屏幕边缘,从不进入虚拟显示器/外接显示器屏幕)
  • 触摸(见截图)

  • 我试过的: dumpsys display 的输出显示虚拟显示器都缺少 touch VIRTUAL内部显示器具有的参数。我不确定这是否意味着显示器本身不支持触摸屏输入,或者它只是没有启用。
    我尝试强制应用程序进入前台,这使应用程序检测到键盘和 Controller 输入,但光标仍锁定在内部显示窗口。
    值得注意的是Android 10桌面模式开发者设置 确实 将光标放在外部显示器而不是内部显示器上。这就是我想要完成的。
    Androids SDK 中似乎有一个隐藏的 Java API:
    https://github.com/aosp-mirror/platform_frameworks_base/blob/a4ddee215e41ea232340c14ef92d6e9f290e5174/services/core/jni/com_android_server_input_InputManagerService.cpp#L825
    我试图通过反射访问这个类并调用 setFocusedDisplay,但我不断收到 ClassNotFound 异常,即使更改了私有(private) API 黑名单安全设置。
    任何帮助将不胜感激。与此相关的唯一其他相关威胁就在这里,但从未解决:
    Android Q VirtualDisplay touch input events
    Example Virtual Display Usage

    最佳答案

    我已经解决了我的问题。指向外部显示器的输入由 Android 内部框架控制。默认情况下,外部鼠标指向内部显示器。要让他们转到外部显示器,必须在开发人员设置中启用强制桌面模式。目前没有其他方法可以转发指针。

    关于Android 10 向外部显示器/虚拟显示器注入(inject)输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63368101/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com