YouTubePlayer: переход в полноэкранный режим с книжной ориентации телефона может легко выйти из полноэкранного режима - PullRequest
0 голосов
/ 10 ноября 2018

Если вы держите телефон в портретной ориентации и нажимаете кнопку полноэкранного режима (из YouTubePlayerView), он легко может вернуть вас обратно (отключить полноэкранный режим), если вы слегка встряхнете телефон

Официальное приложение YouTube работает нормально: вы нажимаете полноэкранную кнопку, удерживая телефон в портретной ориентации, и, если вы слегка его встряхиваете, он все равно остается в полноэкранном ландшафтном режиме. А если повернуть телефон в альбомную ориентацию и вернуться обратно только в портретную ориентацию, он отключится в полноэкранном режиме (как и должно быть)

Так что я бы хотел реализовать то же поведение в официальном приложении YouTube

Я пытался установить разные полноэкранные флаги для YouTubePlayer, но это ни на что не влияет

манифест активности

<activity
    android:label="@string/playerview_demo_name"
    android:name=".PlayerViewDemoActivity"
    android:screenOrientation="user"
    android:configChanges="orientation|screenSize|keyboardHidden">
  <intent-filter >
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

активность Java

public class PlayerViewDemoActivity extends YouTubeFailureRecoveryActivity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.playerview);
    YouTubePlayerView youTubeView = findViewById(R.id.youtube_view);
    youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this);
  }

  @Override
  public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
                                      boolean wasRestored) {
    if (!wasRestored) {
      player.cueVideo("wKJ9KzGQq0w");
      /*
      FULLSCREEN_FLAG_CONTROL_ORIENTATION;
      FULLSCREEN_FLAG_CONTROL_SYSTEM_UI;
      FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE;
      FULLSCREEN_FLAG_CUSTOM_LAYOUT;
      */
      player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION);

  }

  @Override
  protected YouTubePlayer.Provider getYouTubePlayerProvider() {
    return (YouTubePlayerView) findViewById(R.id.youtube_view);
  }
}

Мб приложение YouTube делает что-то вроде этого:

после нажатия кнопки полноэкранного режима они устанавливаются (только если программная ориентация дисплея телефона была в портретном режиме)

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);

затем они используют датчики устройства для определения приблизительной ориентации (если вы держите телефон в книжной / альбомной ориентации) - Определение ориентации устройства Android (НЕ ориентация экрана)

когда вы поворачиваете телефон руками в альбомную ориентацию, они устанавливают

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);

...