【问题标题】:close fullscreen of Youtube Player on back button inside fragment在片段内的后退按钮上关闭 Youtube 播放器的全屏
【发布时间】:2016-02-08 12:49:38
【问题描述】:

我在平板电脑中使用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- youtubeFragment View 添加 onKeyListener 以检查是否全屏然后关闭全屏模式

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 中添加特定于 youtube 的代码之外,您是否找到了解决方案?
  • 不,我找不到其他解决方案

标签: android android-fragments youtube master-detail


【解决方案1】:

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

在您的父 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();
    }
}

【讨论】:

  • 此答案缺少公共变量 youTubePlayer 和 isYouTubePlayerFullScreen 的静态修饰符
  • @EmadMorrisZedan,请详细说明为什么它们必须是静态的。
  • 真棒答案,谢谢 你还需要放入清单文件
【解决方案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 状态同步 OnFullscreenListener 设置为youtubePlayer.setOnFullScreenListener()

希望这是有道理的:)

【讨论】:

  • 活动与 youtube 播放器无关,youtube 播放器在片段内,我不想在活动中处理这个问题。我需要尽可能让代码独立。
  • YouTube 播放器与活动上下文相关。祝您好运找到您要搜索的内容。
猜你喜欢
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 2015-10-28
  • 2017-06-13
  • 2015-05-20
  • 2013-05-11
  • 2013-05-21
相关资源
最近更新 更多