Android 忽略配置更改
Android Ignore configuration change
我的应用程序的一个要求是它必须始终保持纵向,除非用户正在查看媒体。
在我的清单中我设置了 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");
}
}
你应该使用另一种方法
如果不播放 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 相关的特定问题,我相信这是解决问题的最佳方法。
我的应用程序的一个要求是它必须始终保持纵向,除非用户正在查看媒体。
在我的清单中我设置了 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");
}
}
你应该使用另一种方法
如果不播放 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 相关的特定问题,我相信这是解决问题的最佳方法。