Как мы можем сделать так, чтобы действие setLaunchDisplayId() было ландшафтным?

В этом примере проекта мойMainActivity есть код для запуска отдельного действия на внешнем дисплее, используя setLaunchDisplayId() на 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() маршрут.

0 ответов

Другие вопросы по тегам