Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Integrating youtube to fragment

My Activity extends another activity and consists of navigation drawer where each item opens a new fragment.I want to integrate Youtube to one of the fragment..Previously i used YouTubePlayerView to integrate Youtube to activity but here it is required in fragment.I searched on net and found YouTubePlayerFragment to integrate youtube to fragment. But when i searched in tutorials I found that even by using YouTubePlayerFragment we are extending YouTubeBaseActivity .These are the examples.. http://android-coding.blogspot.in/2013/04/example-to-use-youtubeplayerfragment-of.html http://android-er.blogspot.in/2013/06/example-to-use-youtubeplayerfragment-of.html

I failed to understand how to use YouTubePlayerFragment such that my class extends Fragment rather than YouTubeBaseActivity which is required in my project..As u can see below my class extends another activity and consists of navigation drawer in which fifth option opens YouTube Fragment.I want to play Youtube video inside this fragment..I am giving brief layout how my classes are-

public class LandingActivity extends BaseGActivity { . . . .   public void selectDrawerItem(int position) {          Bundle args = new Bundle();          switch (position) {             case 0:                 currentFragment = new HomeFragment_();                 args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_ALL);                 GApplication.getInstance().stopGPlayer();                 break;             case 1:                 currentFragment = new HomeFragment_();                 args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_PHOTO);                 GApplication.getInstance().stopGPlayer();                 break; //             case 2:                 currentFragment = new HomeFragment_();                 args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_AUDIO);                 GApplication.getInstance().stopGPlayer();                 break;              case 3:                 currentFragment = new HomeFragment_();                 args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_VIDEO);                 GApplication.getInstance().stopGPlayer();                 break;             case 4:                 currentFragment = new HomeFragment_();                 args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_MEME);                 GApplication.getInstance().stopGPlayer();                 break;             case 5:                 currentFragment = new YoutubeFragment();             default:                 currentFragment = new HomeFragment_();                 args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_ALL);                 GApplication.getInstance().stopGPlayer();                 break;         }          currentFragment.setArguments(args);         FragmentManager frgManager = getFragmentManager();         frgManager.beginTransaction().replace(R.id.content_frame, currentFragment)                 .commit();          mDrawerList.setItemChecked(position, true);         setTitle(dataList.get(position).getItemName());         mDrawerLayout.closeDrawers();     }       public class YoutubeFragment extends Fragment implements YouTubePlayer.OnInitializedListener{         private FragmentActivity myContext;          private YouTubePlayer YPlayer;         private static final String YoutubeDeveloperKey = "xyz";         private static final int RECOVERY_DIALOG_REQUEST = 1;         @Override         public void onAttach(Activity activity) {              if (activity instanceof FragmentActivity) {                 myContext = (FragmentActivity) activity;             }              super.onAttach(activity);         }         @Override         public View onCreateView(LayoutInflater inflater, ViewGroup container,                                  Bundle savedInstanceState) {              View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false);              YouTubePlayerView youTubeView = (YouTubePlayerView) rootView.findViewById(R.id.youtube_view);             youTubeView.initialize(YoutubeDeveloperKey, (YouTubePlayer.OnInitializedListener) myContext);             return rootView;         }         @Override         public void onInitializationFailure(YouTubePlayer.Provider provider,                                             YouTubeInitializationResult errorReason) {             if (errorReason.isUserRecoverableError()) {                 errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();             } else {                 String errorMessage = String.format(                         "There was an error initializing the YouTubePlayer",                         errorReason.toString());                 Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();             }         }          @Override         public void onActivityResult(int requestCode, int resultCode, Intent data) {             if (requestCode == RECOVERY_DIALOG_REQUEST)             {                  getYouTubePlayerProvider().initialize(YoutubeDeveloperKey, this);             }         }            @Override         public void onInitializationSuccess(YouTubePlayer.Provider provider,                                             YouTubePlayer player, boolean wasRestored) {             if (!wasRestored) {                 YPlayer = player;                 YPlayer.setFullscreen(true);                 YPlayer.loadVideo("2zNSgSzhBfM");                 YPlayer.play();             }         }      } 

YouTubeFragment.java

public class YoutubeFragment extends Fragment implements         YouTubePlayer.OnInitializedListener {     private FragmentActivity myContext;  private YouTubePlayer YPlayer; private static final String YoutubeDeveloperKey = "xyz"; private static final int RECOVERY_DIALOG_REQUEST = 1;  @Override public void onAttach(Activity activity) {      if (activity instanceof FragmentActivity) {         myContext = (FragmentActivity) activity;     }      super.onAttach(activity); }  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,                          Bundle savedInstanceState) {      View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false);      YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();      youTubePlayerFragment.initialize("DEVELOPER_KEY", new YouTubePlayer.OnInitializedListener() {       });     FragmentTransaction transaction = getChildFragmentManager().beginTransaction();     transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();     return rootView;  }     @Override     public void onInitializationSuccess (YouTubePlayer.Provider provider, YouTubePlayer     youTubePlayer,boolean b){         if (!b) {             YPlayer = youTubePlayer;             YPlayer.setFullscreen(true);             YPlayer.loadVideo("2zNSgSzhBfM");             YPlayer.play();         }     }      @Override     public void onInitializationFailure (YouTubePlayer.Provider     provider, YouTubeInitializationResult youTubeInitializationResult){      } } 

layout

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent">     <fragment         android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"         android:id="@+id/youtube_fragment"         android:layout_width="match_parent"         android:layout_height="wrap_content"/> </LinearLayout> 

Error-

Error:(64, 101) error: <anonymous com.pc.gi.ui.fragment.YoutubeFragment$1> is not abstract and does not override abstract method onInitializationFailure(Provider,YouTubeInitializationResult) in OnInitializedListener 
like image 881
Android Developer Avatar asked Oct 20 '14 05:10

Android Developer


People also ask

Why use a fragment to play YouTube videos?

Using this fragment is the preferred way of playing YouTube videos because your activity does not need to extend an activity provided by the library, as is the case with using the YouTubePlayerView directly.

How to create a youtubeplayerfragment programmatically?

This constructor is public only for use by an inflater. Use newInstance () to create a YouTubePlayerFragment programmatically. Initialize a YouTubePlayer, which can be used to play videos and control video playback. One of the callbacks in listener will be invoked when the initialization succeeds or fails.

How to get the developer API key for YouTube player fragments?

YouTubePlayerFragment youTubePlayerFragment = (YouTubePlayerFragment) getFragmentManager ().findFragmentById (R.id.youtube_fragment); youTubePlayerFragment.initialize ("You_Developer_Api_Key", onInitializedListener); To get the Developer API Key follow this link.

How to create an instance of a fragment from an activity?

Then in your Activity you can create its instance using below line in your onCreareView method of your Fragment. YouTubePlayerSupportFragment youTubePlayerFragment = (YouTubePlayerSupportFragment) getActivity ().getSupportFragmentManager () .findFragmentById (R.id.youtube_fragment);


1 Answers

First extend your Activity as normal

 class YourActivity extends Activity... 

in Layout file put the below lines

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

Then in your Activity you can create its instance using below line in your onCreareView method of your Fragment.

YouTubePlayerSupportFragment youTubePlayerFragment = (YouTubePlayerSupportFragment) getActivity().getSupportFragmentManager()                     .findFragmentById(R.id.youtube_fragment); 

or you can declare a FrameLayout in your xml and then initiate the YouTubeSupportFragment using below lines

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent" >      <FrameLayout         android:id="@+id/youtube_fragment"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:layout_centerHorizontal="true"         android:visibility="visible" />  </RelativeLayout> 

Code in your onCreateView

 YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();      youTubePlayerFragment.initialize("DEVELOPER_KEY", new OnInitializedListener() {          @Override         public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {              if (!wasRestored) {                 YPlayer = player;                 YPlayer.setFullscreen(true);                 YPlayer.loadVideo("2zNSgSzhBfM");                 YPlayer.play();             }          }          @Override         public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) {             // TODO Auto-generated method stub          }     });     FragmentTransaction transaction = getChildFragmentManager().beginTransaction();     transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit(); 

The key thing here is to use YouTubePlayerSupportFragment instead of YouTubePlayerFragment.

Hope this helps.

Here is your Fragment

import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;  import com.google.android.youtube.player.YouTubeInitializationResult; import com.google.android.youtube.player.YouTubePlayer; import com.google.android.youtube.player.YouTubePlayer.OnInitializedListener; import com.google.android.youtube.player.YouTubePlayer.Provider; import com.google.android.youtube.player.YouTubePlayerSupportFragment; import com.ismart.omanapp.R;  public class YoutubeFragment extends Fragment {     private FragmentActivity myContext;      private YouTubePlayer YPlayer;     private static final String YoutubeDeveloperKey = "xyz";     private static final int RECOVERY_DIALOG_REQUEST = 1;      @Override     public void onAttach(Activity activity) {          if (activity instanceof FragmentActivity) {             myContext = (FragmentActivity) activity;         }          super.onAttach(activity);     }      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {          View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false);          YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();         FragmentTransaction transaction = getChildFragmentManager().beginTransaction();         transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();          youTubePlayerFragment.initialize("DEVELOPER_KEY", new OnInitializedListener() {              @Override             public void onInitializationSuccess(Provider arg0, YouTubePlayer youTubePlayer, boolean b) {                 if (!b) {                     YPlayer = youTubePlayer;                     YPlayer.setFullscreen(true);                     YPlayer.loadVideo("2zNSgSzhBfM");                     YPlayer.play();                 }             }              @Override             public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) {                 // TODO Auto-generated method stub              }         });      } } 
like image 129
Sunny Avatar answered Sep 24 '22 17:09

Sunny