将youtube集成到片段

问题描述:

我的Activity扩展了另一个活动,并由导航抽屉组成,其中每个项目打开一个新片段。我想将Youtube集成到其中一个片段中。以前,我使用YouTubePlayerView将Youtube集成到活动中,但这里是我在网上搜索并找到YouTubePlayerFragment将youtube集成到片段中。但是,当我在搜索教程我发现,即使使用YouTubePlayerFragment,我们正在展开YouTubeBaseActivity。这些都是例子.. 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将youtube集成到片段

我无法理解如何使用YouTubePlayerFragment这样,我的类扩展片段,而不是YouTubeBaseActivity这在我的项目中是必需的。您可以在下面看到我的课程扩展了另一项活动,并由第五个选项打开YouTube Fragment的导航抽屉组成。我想在此片段内播放Youtube视频..我将简要介绍我的课程 -

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(); 
      } 
     } 

    } 

YouTubeFrag ment.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){ 

    } 
} 

布局

<?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:(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 
+0

我最近实施了我的应用程序YouTube视频播放器。我第一次尝试使用YoutubePlayerFragment,但它的API有点不切实际,它没有提供非常“流畅”的用户体验......所以我尝试了YouTube的iframe API(https://developers.google.com/youtube/iframe_api_reference )在WebView中。 Android WebView不支持所有的HTML5功能,所以你需要自己做一些东西......但是这个(https://code.google.com/p/html5webview/)是一个很好的开始。最终结果是值得的。 – 2014-10-20 12:43:20

+0

试试这个:http://*.com/questions/34803095/android-studio-google-map-api-with-fragments – 2017-03-31 02:34:26

首先拓展业务正常

class YourActivity extends Activity... 
在版式文件

把下面的线

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

然后在您的活动中,您可以在您的Fragment的onCreareView方法中使用下面的行创建它的实例。

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

,或者你可以声明在XML一个FrameLayout里,然后开始在你的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(); 

事情的关键使用YouTubeSupportFragment低于线

<?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> 

代码下面是使用YouTubePlayerSupportFragment而不是YouTubePlayerFragment

希望这会有所帮助。

这是你的片段

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 

      } 
     }); 

    } 
} 
+0

嗨..我想播放youtube视频里面片段..我的活动由导航抽屉上我想要的是当我点击第五项时,它会打开一个播放YouTube视频的片段。如果我将这段代码放入活动中,它会在点击导航抽屉中的第五项时播放YouTube视频。或者它只会在活动内部开始播放YouTube视频?我应该在扩展片段的类中放置哪些代码?请再次阅读我的问题..thanku你的时间.. – 2014-10-20 06:30:39

+1

其实你想在你的片段YoutubeFragment。你需要使用'getChildFragmentManager()'而不是'getSupportedFragmentManager();' – Sunny 2014-10-20 10:00:16

+0

你应该使用我的第二种方法。即创建一个xml文件并在其中放置一个frameLayout,并使用我在上面的代码片段onCreateView中编写的代码。 – Sunny 2014-10-20 10:03:28