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
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.
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.
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.
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);
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 } }); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With