在片段内的后退按钮上关闭 Youtube Player 全屏

close fullscreen of Youtube Player on back button inside fragment

我在平板电脑上使用Master/Detail布局,左边几个按钮打开几个片段,其中一个片段包含youtube播放器。

问题,

当 youtube 播放器全屏时,我按下后退按钮,activity onBackPressed 被调用,整个 activity 已关闭。

我试过了,

1- 添加了父片段(包含 Youtube 片段)的 KeyListener 和点击后退按钮时的处理,但只有当播放器不是全屏时才会调用此监听器,否则不会调用,

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 View 以检查它是否全屏然后关闭全屏模式

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 中处理它,我已经在父级 activity 中处理它,但我不喜欢这个解决方案。

您可以在 activity 中覆盖 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. In above code fragment, isFullscreen is instance variable of our activity and is synced with youtubePlayer state from within OnFullscreenListener set on youtubePlayer.setOnFullScreenListener().

Hope that makes sense :)

添加到 Andre 的回复中。

在你的 parent Activity 添加:

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();
    }
}