如何在多显示器设备的第二个屏幕上启动应用程序

Posted

技术标签:

【中文标题】如何在多显示器设备的第二个屏幕上启动应用程序【英文标题】:How to launch application on the second screen on Multi Display devices 【发布时间】:2021-12-09 11:42:36 【问题描述】:

我正在开发一个 android 应用程序,该应用程序只能在具有两个屏幕的设备上运行(运行 API 29)。我有两个有点相关的问题:

1.是否可以直接在第二个显示器而不是主显示器上启动应用程序?现在它在主显示器上启动,然后我可以使用 ActivityOptions 在第二个显示器上启动后续活动。

例如:

val exampleIntent = Intent(this, ExampleActivity::class.java)
exampleIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(
    exampleIntent, 
    ActivityOptions.makeBasic().setLaunchDisplayId(secondDisplayId).toBundle() 
)

2) 是否可以在重新启动之前明确完成在第二台显示器上运行的活动?

我有一个用例,当满足某些条件时,我需要在第二个显示器(从主显示器)上重新启动一个活动。但是,如果该活动已在第二个屏幕上运行,则不会重新启动。

有没有办法在启动之前完成/关闭该活动?

【问题讨论】:

【参考方案1】:

是否可以直接在第二个显示器而不是主显示器上启动应用程序?

这取决于进行发射的人。例如,如果启动器正在启动,则启动器必须指示您的应用的入口点活动应该在辅助显示屏上。

是否可以在重新启动之前明确完成在第二台显示器上运行的活动?

该活动可以调用finish() 自行完成。您需要通过一种或另一种方式告诉活动这样做,或者活动需要自己知道是时候完成了。例如,辅助显示活动可以对您在以下句子中引用的相同条件做出反应:

我有一个用例,当满足某些条件时,我需要在第二个显示器(从主显示器)上重新启动一个活动

说实话,这感觉就像是您自己强加的编码限制。从操作系统的角度来看,您无法通过销毁和重新创建活动来获得什么。

而且,这种行为可能看起来很糟糕,具体取决于您使用的是哪种双屏环境。例如,如果辅助显示器是电视、显示器或投影仪之类的设备,则 Android 的默认行为是将主显示器镜像到辅助显示器上。我希望您提出的行为会出现大量闪烁:

你破坏了旧的次要活动 Android 开始将主显示器镜像到辅助显示器 您开始替代次要活动

因此,我会竭尽全力避免不得不销毁并重新启动活动。例如,也许辅助显示器不应该显示活动,而是显示Presentation(其工作方式更像Dialog)。或者,也许辅助 Activity 可以简单地更新自己的 UI 以响应您引用的条件,而不必从头开始重建。

【讨论】:

感谢您的详细回答。您能否详细说明一下启动器必须指示应用程序的入口点才能进入辅助显示? @hamrosvet:基本上,启动器需要使用ActivityOptions,就像您的问题一样。

以上是关于如何在多显示器设备的第二个屏幕上启动应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Windows 10中的第二个屏幕上的WPF窗口对象被涂黑

关闭应用程序并在 Android 上启动主屏幕

应用程序的第二个(横向)屏幕在 iOS6 中变成纵向

iOS8.0(和 8.1)上第二个 UIScreen 的自动旋转问题

在第二个屏幕上显示对话框/帧全屏唱 QT/c++

如何使用 kivy StringProperty?