从Android O开始,以下代码可用于在默认值以外的显示器上启动活动:
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(d.getDisplayId());
Intent i = new Intent(this, OtherActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i, options.toBundle());
在这种情况下,将创建一个新任务,该任务可能会在备用显示器上启动其他活动。从活动中如何检测当前正在使用哪个显示?我本以为Window
类会告诉我,但在那里找不到任何功能。
答案 0 :(得分:0)
Ben P.的评论是正确的,尽管名称WindowManager#getDefaultDisplay()
实际上返回了Display
对象,该对象恰好与获得时的WindowManager
实例相关联,准确反映活动当前正在运行的显示。
返回此WindowManager实例将在其上创建的Display 新窗口。
尽管使用此方法的名称,但返回的显示不是 必须是系统的主要显示(请参阅 Display.DEFAULT_DISPLAY)。返回的显示可能改为 此窗口管理器实例正在管理的辅助显示。认为 作为该WindowManager实例默认使用的显示。
要在其他显示器上创建窗口,您需要获取一个 该显示的WindowManager。 (请参见WindowManager类 文档以获取更多信息。)
因此,假设您调用了Activity#getSystemService
以获取WindowManager
,则应该返回正确的Display
对象。 WindowManager
和SearchManager
似乎special case managers知道与大多数管理者不同的获取背景。