7

Please bear up with me as I am pretty new to Android. I am trying to initialize Youtube player in a fragment class. Google has already provided method to initialize in Activity which goes as follows:

package com.examples.youtubeapidemo;

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;

import android.os.Bundle;


public class PlayerViewDemoActivity extends YouTubeFailureRecoveryActivity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.playerview_demo);

    YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
    youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this);
  }

  @Override
  public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
      boolean wasRestored) {
    if (!wasRestored) {
      player.cueVideo("wKJ9KzGQq0w");
    }
  }

  @Override
  protected YouTubePlayer.Provider getYouTubePlayerProvider() {
    return (YouTubePlayerView) findViewById(R.id.youtube_view);
  }

}

I tried using this code but its not working:

public class TabFragment5 extends YouTubePlayerFragment implements YouTubePlayer.OnInitializedListener {
    /** (non-Javadoc)
     * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
     */
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }
           YouTubePlayerFragment yf =  newInstance(); //new  YouTubePlayerFragment();
        yf.initialize("dsds", this);
        return (LinearLayout)inflater.inflate(R.layout.tab_frag4_layout, container, false);
    }

    @Override
    public void onInitializationFailure(Provider arg0,
            YouTubeInitializationResult arg1) {
        // TODO Auto-generated method stub

    }

      @Override
      public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
          boolean wasRestored) {
        if (!wasRestored) {
          player.cueVideo("nCgQDjiotG0");
        }
      }
}

I would be very grateful if anyone can provide equivalent API for fragment.

Thanks

1 Answers1

4

Try to use the example below:

fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".VideoFragment" >
    <fragment
        android:name="com.google.android.youtube.player.YouTubePlayerFragment"
        android:id="@+id/youtubeplayerfragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</RelativeLayout>



Fragment creation

VideoFragment videoFragment = VideoFragment.newInstance(VIDEO_ID);


VideoFragment

public class VideoFragment extends YouTubePlayerSupportFragment {
    public static final String DEVELOPER_ANDROID_KEY = "KEY";

    public static VideoFragment newInstance(String url) {
        VideoFragment videoFragment = new VideoFragment();
        Bundle bundle = new Bundle();
        bundle.putString("url", url);
        videoFragment.setArguments(bundle);
        videoFragment.init(0);
        return videoFragment;
    }

    private void init(final int time) {
        initialize(DEVELOPER_ANDROID_KEY, new OnInitializedListener() {

            @Override
            public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) {
            }

            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer
                                                             player, boolean wasRestored) {
                mPlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
                id = getArguments().getString("url");
                if (!wasRestored) {
                    mPlayer.loadVideo(id, time);
                }
            }
        });
     }   
 }    
Alexey
  • 4,384
  • 1
  • 26
  • 34
  • In the event that the fragment was destroyed, and get resume (e.g. using Don't Keep Activity setting), my mPlayer is no longer valid. The initialization doesn't reach onInitilizationSuccess anymore... as Youtube could restore it's own state. How could I get restore mPlayer? – Elye Jan 30 '16 at 13:00
  • 1
    @Elye : did you find a solution to your scenario ? – Nishant Chauhan Nov 18 '16 at 09:27
  • @Elye it looks like youtube use the same layout for both orientation, so no changes in onConfigurationChanged – Siarhei Aug 06 '17 at 05:12