如何解决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监视器一样)。问题是我无法将触摸或光标输入发送到虚拟显示器。
有效方法:
什么不起作用:
我尝试过的事情:
dumpsys display
的输出表明虚拟显示器都缺少内部显示器具有的touch VIRTUAL
参数。我不确定这是否表示显示器本身不支持触摸屏输入,还是根本没有启用它。
我尝试将应用程序强制进入前台,这使应用程序能够检测键盘和控制器输入,但是光标仍然锁定在内部显示窗口上。
值得注意的是,Android 10桌面模式开发人员设置做将光标置于外部显示器上,而不是内部显示器上。这就是我想要完成的。
Androids SDK中似乎有一个隐藏的Java API:
我试图通过反射来访问该类并调用setFocuseddisplay,但即使更改了私有API黑名单安全设置,我仍然不断收到ClassNotFound异常。
这里将提供任何帮助。与此相关的唯一其他相关威胁在这里,但从未解决:
Android Q VirtualDisplay touch input events
解决方法
我已经解决了我的问题。定向到外部显示器的输入由Android内部框架控制。默认情况下,外部鼠标被定向到内部显示器。要使它们进入外部显示器,必须在“开发人员设置”中启用“强制桌面模式”。当前没有其他方法可以转发指针。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。