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, это лучший способ решить ее, я считаю.