如何确定Android活动正在使用哪种显示?

时间:2019-01-22 20:34:08

标签: android

从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类会告诉我,但在那里找不到任何功能。

1 个答案:

答案 0 :(得分:0)

Ben P.的评论是正确的,尽管名称WindowManager#getDefaultDisplay()实际上返回了Display对象,该对象恰好与获得时的WindowManager实例相关联,准确反映活动当前正在运行的显示。

  

返回此WindowManager实例将在其上创建的Display   新窗口。

     

尽管使用此方法的名称,但返回的显示不是   必须是系统的主要显示(请参阅   Display.DEFAULT_DISPLAY)。返回的显示可能改为   此窗口管理器实例正在管理的辅助显示。认为   作为该WindowManager实例默认使用的显示。

     

要在其他显示器上创建窗口,您需要获取一个   该显示的WindowManager。 (请参见WindowManager类   文档以获取更多信息。)

因此,假设您调用了Activity#getSystemService以获取WindowManager,则应该返回正确的Display对象。 WindowManagerSearchManager似乎special case managers知道与大多数管理者不同的获取背景。