代码之家  ›  专栏  ›  技术社区  ›  Omar HossamEldin

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

  •  7
  • Omar HossamEldin  · 技术社区  · 8 年前

    我正在使用 主/详细信息 布局在平板电脑上,左边的几个按钮打开几个片段,其中一个片段包含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: -我想在片段中处理这个问题,而不是在父活动中处理,我已经在父活动内处理了,但我不喜欢这个解决方案。

    2 回复  |  直到 8 年前
        1
  •  5
  •   Valeriya    6 年前

    只是为了补充安德烈的回答。

    在父活动中添加:

    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 以及玩家是否全屏的信息。

    接下来,在您的 活动 推翻 onBackPressed 这样地:

    @Override
    public void onBackPressed() {
        if (youTubePlayer != null && isYouTubePlayerFullScreen){
                youTubePlayer.setFullscreen(false);
        } else {
            super.onBackPressed();
        }
    }
    
        2
  •  4
  •   Ashu    6 年前

    您可以覆盖 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();
        }
    }
    

    附笔。 在上述代码片段中, isFullscreen 是我们的实例变量 活动,并与同步 youtubePlayer 从内部状态 OnFullscreenListener 启动 youtubePlayer.setOnFullScreenListener() .

    希望有意义:)