在片段内的后退按钮关闭Youtube播放器的全屏

Oma*_*din 6 youtube android master-detail android-fragments

我在平板电脑中使用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;
            }
        });
Run Code Online (Sandbox Code Playgroud)

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;
                                                }
                                            });
Run Code Online (Sandbox Code Playgroud)

并且在所有情况下也没有调用.

当youtube播放器处于全屏模式时,我需要处理硬件后退按钮,全屏模式关闭,应用程序处于先前状态.

谢谢.

编辑1: - 我想在片段内处理这个,而不是在父Activity中处理它,我已经在父活动中处理它,但我不喜欢这个解决方案.

Ler*_*era 5

只是为了补充Andre的回复。

在您的父活动中添加:

public YouTubePlayer youTubePlayer;
public boolean isYouTubePlayerFullScreen;
Run Code Online (Sandbox Code Playgroud)

在您的片段中添加:

MainActivity mainActivity = (MainActivity) getActivity();
Run Code Online (Sandbox Code Playgroud)

然后,在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;
            }
        });

    }
Run Code Online (Sandbox Code Playgroud)

现在,您Activity可以访问YouTubePlayer播放器是否全屏,并可以获取信息。

接下来,在您的内Activity,onBackPressed像这样覆盖:

@Override
public void onBackPressed() {
    if (youTubePlayer != null && isYouTubePlayerFullScreen){
            youTubePlayer.setFullscreen(false);
    } else {
        super.onBackPressed();
    }
}
Run Code Online (Sandbox Code Playgroud)


And*_*sen 4

您可以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();
    }
}
Run Code Online (Sandbox Code Playgroud)

PS在上面的代码片段中,是我们 Activity 的实例变量,并与set on内的状态 isFullscreen同步。 youtubePlayerOnFullscreenListeneryoutubePlayer.setOnFullScreenListener()

希望这是有道理的:)