Android 10将输入注入到外部显示器/虚拟显示器

如何解决Android 10将输入注入到外部显示器/虚拟显示器

概念:

我有一个用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>
  • 无线控制器
  • 无线键盘

什么不起作用:

  • 无线/有线鼠标(光标碰到电话屏幕的边缘,从不进入虚拟显示器/外部显示器屏幕)
  • 触摸(请参阅屏幕截图)

我尝试过的事情:

dumpsys display输出表明虚拟显示器都缺少内部显示器具有的touch VIRTUAL参数。我不确定这是否表示显示器本身不支持触摸屏输入,还是根本没有启用它。

我尝试将应用程序强制进入前台,这使应用程序能够检测键盘和控制器输入,但是光标仍然锁定在内部显示窗口上。

值得注意的是,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,但即使更改了私有API黑名单安全设置,我仍然不断收到ClassNotFound异常。

这里将提供任何帮助。与此相关的唯一其他相关威胁在这里,但从未解决

Android Q VirtualDisplay touch input events

Example Virtual Display Usage

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?