12

这个示例项目中,我MainActivity的代码可以在外部显示器上启动一个单独的活动,使用setLaunchDisplayId()on ActivityOptions

class MainActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    getSystemService(DisplayManager::class.java)
      .getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION)
      .firstOrNull()
      ?.let { display ->
        Intent(this, ExternalDisplayActivity::class.java)
          .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
          .let { intent ->
            ActivityOptions.makeBasic()
              .setLaunchDisplayId(display.displayId)
              .toBundle()
              .let { opts ->
                startActivity(intent, opts)
              }
          }
      }
  }
}

ExternalDisplayActivity在外接显示器上正常启动。然而; 它以纵向模式显示,而不是横向模式。使用真实显示器和“设置”中“开发人员选项”中的模拟外部显示器都会发生这种情况。

奇怪的是,尽管我android:screenOrientation="landscape"ExternalDisplayActivity清单条目上有并且我在运行时请求景观,但还是出现了这种情况:

class ExternalDisplayActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_external)
    requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
  }
}

如果我使用一个Presentation较旧的 API,景观可以工作,但我无法弄清楚如何让景观与setLaunchDisplayId()路线一起工作。

4

0 回答 0