【问题标题】:YouTube API video doesn't start in a FragmentYouTube API 视频不以片段开头
【发布时间】:2018-02-27 09:36:27
【问题描述】:

我正在尝试在具有多个标签的活动中的片段中添加 YouTube 视频播放器。到目前为止,我已经设法运行代码,但我无法启动视频。我添加了一些日志来跟踪进度,似乎通过单击播放按钮,没有任何变化(日志中除外)并且视频无法播放,我不知道为什么。我得到的是这个冻结的屏幕:

我有 Fragment.java 的以下代码:

 import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentActivity;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;

    import com.google.android.youtube.player.YouTubeInitializationResult;
    import com.google.android.youtube.player.YouTubePlayer;
    import com.google.android.youtube.player.YouTubePlayerFragment;
    import com.google.android.youtube.player.YouTubePlayerSupportFragment;
    import com.google.android.youtube.player.YouTubePlayerView;

    import java.util.ArrayList;
    import java.util.List;


    public class FragmentSedinte extends Fragment {
      View v;
      private static final String TAG = "Checking";
      Button btnPlay;
      YouTubePlayerView mYouTubePlayerView;
      YouTubePlayer.OnInitializedListener mOnInitializedListener;

      public FragmentSedinte() {}

      @Nullable
      @Override
      public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.fragment_sedinte, container, false);
        return v;
      }

      public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        //YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();
        //youTubePlayerFragment.initialize("AIxxxxx",mOnInitializedListener);
        super.onViewCreated(view, savedInstanceState);
        this.v = view;
        Log.d(TAG, "onCreate: Starting.");
        //mYouTubePlayerView = (YouTubePlayerView)v.findViewById(R.id.youtubePlay);
        YouTubePlayerSupportFragment youTubePlayerFragment = (YouTubePlayerSupportFragment) getFragmentManager().findFragmentById(R.id.youtubePlay);
        mOnInitializedListener = new YouTubePlayer.OnInitializedListener() {
          @Override
          public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) {
            Log.d(TAG, "onClick: Done initialising");
            youTubePlayer.setFullscreen(true);
            youTubePlayer.loadVideo("tz-Wf9nEFao");
            youTubePlayer.play();

          }
          @Override
          public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
            Log.d(TAG, "onClick: Failed initializing");
          }
        };

        btnPlay = (Button) v.findViewById(R.id.btnPlay);
        btnPlay.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
            Log.d(TAG, "onClick: Initializing YouTube");
            //mYouTubePlayerView.initialize(YouTubeConfig.getApiKey(),mOnInitializedListener);
            mYouTubePlayerView.initialize("AIxxxxxxxx", mOnInitializedListener);
          }
        });
      }
    }

其中 Layout 有如下代码:

 <FrameLayout xmlns : android = "http://schemas.android.com/apk/res/android"
android: id = "@+id/container"
android: layout_width = "match_parent"
android: layout_height = "match_parent" >

  <LinearLayout
android: layout_width = "match_parent"
android: layout_height = "match_parent"
android: orientation = "vertical" >

  <fragment
android: id = "@+id/youtubePlay"
android: name = "com.google.android.youtube.player.YouTubePlayerSupportFragment"
android: layout_width = "match_parent"
android: layout_height = "wrap_content" / >

  <Button
android: id = "@+id/btnPlay"
android: layout_width = "100dp"
android: layout_height = "wrap_content"
android: layout_gravity = "center_horizontal"
android: gravity = "center_vertical|fill_vertical"
android: text = "Play"
android: textAlignment = "center" / >
  </LinearLayout>

  </FrameLayout>

当我点击播放时,我可以在 Logcat 中看到它被触发,但它没有开始播放视频。在日志中我有这个:

 02 - 27 10: 26: 50.092 17297 - 17320 / Package.recyclerview V / FA: Inactivity, disconnecting from the service
    02 - 27 10: 26: 54.137 17297 - 17297 / Package.recyclerview D / Checking: onClick: Initializing YouTube
    02 - 27 10: 26: 59.422 17297 - 17297 / Package.recyclerview D / Checking: onCreate: Starting.
    02 - 27 10: 27: 02.786 17297 - 17297 / Package.recyclerview D / Checking: onClick: Initializing YouTube

很明显该按钮已被触发,但似乎没有转到onInitializationSuccess。谁能帮我解决这个问题?

如有必要,我可以添加更多文件,但我认为问题出在此处发布的第一个文件。

【问题讨论】:

  • 谢谢@Abhishekc,这段代码中的一些内容取自那里。尤其是在布局中,因为我收到“错误充气...”

标签: android android-fragments youtube-api


【解决方案1】:

你已经混合了YouTubePlayerFragmentYouTubePlayerView

更新您的代码
 mYouTubePlayerView = (YouTubePlayerView) v.findViewById(R.id.youtubePlay);

YouTubePlayerFragment youTubePlayerFragment = (YouTubePlayerFragment)getFragmentManager()
             .findFragmentById(R.id.youtubePlay);

更改加载

 @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
                                        boolean wasRestored) {
        if (!wasRestored) {
            player.loadVideo(YoutubeLinkRequest.getYouTubeID(youTubeURL), currentPlaying);
        }
        player.setPlayerStyle(YouTubePlayer.PlayerStyle.MINIMAL);
    }

【讨论】:

  • 感谢您的回答。刚试过,但没有成功。同样的行为......
  • 它仍然显示Checking: onClick: Initializing。好像不想跳转到onInitializationSuccess
  • 是调用onInitializationSuccess 还是onInitializationFailure
  • 没有。好像卡在public void onClick(View view){这个原因,我也试过加一行直接播放视频,不用按钮(见onViewCreated下的注释代码),也是一样。
  • 更新了答案检查一下
猜你喜欢
  • 2019-01-15
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 2018-05-20
相关资源
最近更新 更多