【问题标题】:Android Ignore configuration changeAndroid 忽略配置更改
【发布时间】:2015-09-03 17:16:04
【问题描述】:

我的应用程序的一个要求是它必须始终保持纵向,除非用户正在查看媒体。

在我的清单中,我设置了android:configChanges="orientation|screenSize",因此每次用户从纵向更改为横向时都会调用 onConfigurationChanged。

我在我的应用中实现了一个 youtubeplayersupportfragment。当用户选择全屏时,我希望允许用户将屏幕旋转为横向,以便在需要时允许用户全屏查看。

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”等于 false?

调用 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");
        }
    }

【问题讨论】:

  • 简单地说,你不能以这种方式阻止配置更改。

标签: android orientation screen-orientation android-orientation onconfigurationchanged


【解决方案1】:

你应该使用另一种方法

如果不播放 youtube,只需将其设置为将方向锁定为纵向

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

当切换到播放 youtube 时,使用此命令设置回允许旋转

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)

【讨论】:

    【解决方案2】:

    我得出的解决方案是基于@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 相关的问题,我认为这是解决问题的最佳方法。

    【讨论】:

      猜你喜欢
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多