我在平板电脑中使用 Master / Detail 布局,在左侧几个按钮上打开几个片段,其中一个片段包含youtube播放器。
问题,
当youtube播放器全屏显示时,按下后退按钮,将调用活动 onBackPressed
,并关闭整个活动。
我尝试了什么,
1-在KeyListener上添加父片段(包含Youtube片段)并在单击后退按钮时处理,但仅当播放器不是全屏时才调用此侦听器,否则不调用它,
rootView.setFocusableInTouchMode(true);
rootView.requestFocus();
rootView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
try {
// Close full screen
return true;
} catch (Exception e) {
AHHExceptionHandler.handleException(e);
}
}
return false;
}
});
2-添加onKeyListener到youtubeFragment查看是否全屏,然后关闭全屏模式
youTubeFragment.getView().setFocusableInTouchMode(true);
youTubeFragment.getView().requestFocus();
youTubeFragment.getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
try {
youTubePlayer.setFullscreen(false);
return true;
} catch (Exception e) {
AHHExceptionHandler.handleException(e);
}
}
return false;
}
});
在所有情况下都不会调用它。
当youtube播放器处于全屏模式时,我需要处理硬件后退按钮,全屏模式关闭,应用程序处于以前的状态。
感谢。
编辑1: - 我想在片段中处理这个,而不是在父Activity中处理它,我已经在父活动中处理它了,但我不喜欢这个解决方案。
答案 0 :(得分:4)
只是添加安德烈的回复。
在您的父级活动中添加:
public YouTubePlayer youTubePlayer;
public boolean isYouTubePlayerFullScreen;
在您的片段中添加:
MainActivity mainActivity = (MainActivity) getActivity();
然后,在YouTubePlayerFragment
初始化:
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) {
mainActivity.youTubePlayer = player;
player.loadVideo(videoId);
player.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
@Override
public void onFullscreen(boolean b) {
mainActivity.isYouTubePlayerFullScreen = b;
}
});
}
现在,Activity
可以访问YouTubePlayer
以及播放器是否为全屏的信息。
接下来,在Activity
内,覆盖onBackPressed
,如下所示:
@Override
public void onBackPressed() {
if (youTubePlayer != null && isYouTubePlayerFullScreen){
youTubePlayer.setFullscreen(false);
} else {
super.onBackPressed();
}
}
答案 1 :(得分:2)
您可以在活动中覆盖onBackPressed()
,如果您的播放器处于全屏状态,您可以按照以下方式处理:
@Override
public void onBackPressed() {
if (youtubePlayer != null && isFullscreen) {
// if fullscreen, set fullscreen false
youtubePlayer.setFullscreen(false);
} else {
// if NOT fullscreen, perform default call on back press
super.onBackPressed();
}
}
P.S。在上面的代码片段中,
isFullscreen
是我们的实例变量 活动并从内部与youtubePlayer
州同步 在<{1}}上设置OnFullscreenListener
。希望有道理:)