Android игнорирует изменение конфигурации

Требование моего приложения заключается в том, чтобы оно всегда оставалось в портретной ориентации, кроме случаев, когда пользователь просматривает мультимедиа.

В моем манифесте я установил android:configChanges="orientation|screenSize" поэтому onConfigurationChanged вызывается каждый раз, когда пользователь переключается с портретного на ландшафтное.

Я реализовал фрагмент поддержки youtubeplayersupport в моем приложении. Когда пользователь выбирает полноэкранный режим, я хочу разрешить ему поворачивать экран в альбомную ориентацию, чтобы пользователь мог просматривать в полноэкранном режиме, если это необходимо.

Youtubeplayer имеет полноэкранный слушатель, который я реализовал здесь

YouTubePlayer.OnInitializedListener YoutubePlayerInitializer = new YouTubePlayer.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer youTubePlayer, boolean b) {
                youTubePlayer.cueVideo(new MediaUtils().getVideoId(mFeedContent.getMedia().getMediaUrl()));
                youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
                youTubePlayer.setFullscreenControlFlags(2);

                youTubePlayer.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
                    @Override
                    public void onFullscreen(boolean b) {
                        if(b)
                            PreferenceUtils.setDisplayMedia(b);
                        else PreferenceUtils.setDisplayMedia(b);
                    }
                });
            }

            @Override
            public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult){
                Log.i(AbstractHolder.class.getSimpleName(), String.valueOf(youTubeInitializationResult));
            }
        };

У меня вопрос: есть ли в любом случае игнорировать изменения конфигурации, основанные на обстоятельствах, то есть 'b' в приведенном ниже коде равно ложному?

Нет смысла вызывать метод setRequestedOrientation(), так как это навсегда фиксирует ориентацию, и onconfigurationchanged не вызывается снова, что мне нужно вызывать при изменении ориентации.

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        boolean media = PreferenceUtils.getDisplayMedia();

        if (newConfig.orientation == newConfig.ORIENTATION_LANDSCAPE && media) {
            //ALLOW ROTATION
            L.i(MainActivity.class.getSimpleName(), "==================================LANDSCAPE");
        } else {
            //IGNORE CONFIGURATION CHANGE
            L.i(MainActivity.class.getSimpleName(), "==================================PORTRAIT");
        }
    }

2 ответа

Решение

Вы должны использовать другой подход

просто установите это, чтобы заблокировать ориентацию как Портрет, если не играете на YouTube

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

при переходе на воспроизведение на YouTube вернитесь, чтобы разрешить вращение с помощью этой команды

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)

Решение, к которому я пришел, основано на ответе @Derek Fung, я использую полноэкранный интерфейс слушателя проигрывателя YouTube

 youTubePlayer.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
            @Override
            public void onFullscreen(boolean b) {
                if(b) {
                    mAbMainActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
                    PreferenceUtils.setDisplayMedia(b);
                }
                else {
                    mAbMainActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                    PreferenceUtils.setDisplayMedia(b);
                }
            }
        });

Так что, если у кого-то есть проблемы, связанные с YouTube, это лучший способ решить ее, я считаю.