2013-04-30 55 views
6

我使用的是Android版YouTube播放器API爲這裏概述:https://developers.google.com/youtube/android/player/多個YouTube播放器在一個活動

但是,我不能讓一個以上的視頻到我的活動一次。我試圖簡單地把兩個YouTubePlayerViews進活動,像這樣:

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" > 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/view_one" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/view_two" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

MainActivity.java

package com.example.multidemo; 

import android.os.Bundle; 

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

public class MainActivity extends YouTubeBaseActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ((YouTubePlayerView) findViewById(R.id.view_one)).initialize("API key", new YouTubePlayer.OnInitializedListener() { 
      @Override 
      public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, boolean arg2) { 
       arg1.cueVideo("RpwoN_XlN6Y"); 
      } 

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

     ((YouTubePlayerView) findViewById(R.id.view_two)).initialize("API key", new YouTubePlayer.OnInitializedListener() { 
      @Override 
      public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, boolean arg2) { 
       arg1.cueVideo("jkk2mMq2x8E"); 
      } 

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

當我嘗試這一點,第一種觀點只是出現黑,而第二個視頻加載。如果我將第二個視頻的onCreate()中的代碼註釋掉,那麼只會加載第一個視頻。

有沒有辦法讓多個YouTubePlayerViews進入同一個活動?

+0

請參閱http://stackoverflow.com/questions/17117164 – 2013-06-17 20:27:14

+0

這是我的問題太...請幫助我們。 – Cristiana214 2014-03-05 04:28:51

回答

2

這可能爲時已晚,但我最近有同樣的問題。希望這對有可能面臨同樣問題的人有所幫助。解決這個問題的方法是使用YoutubePlayerFragments。只要你使用Youtube播放器視圖,你將達到限制多個請求中只有一次初始化的限制。通常,最後一次初始化成功。

我最終動態生成gridlayout並將我的(動態生成的)片段的視圖放置在每個單元格中。然後我在onResume中初始化播放器的實例。一旦初始化成功,您將得到一個球員的句柄,並且您可以在片段上隨機提示不​​同的視頻。

我就粘貼會給你我是多麼構建片段,並做初始化一個想法代碼:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) 
{ 
    mLogger.i("Preparing Youtube view for fragment .."); 
    mFragmentHeight = CustomFragment.getFragmentHeight(mNumScreens,mNumColumns); 
    mFragmentWidth = CustomFragment.getFragmentWidth(mNumColumns); 

    LinearLayout linearLayout = new LinearLayout(getActivity()); 
    GridLayout.LayoutParams gridparams = new GridLayout.LayoutParams(); 
    gridparams.rowSpec = GridLayout.spec(mGridRow); 
    gridparams.columnSpec = GridLayout.spec(mGridColumn); 
    gridparams.height = mFragmentHeight; 
    gridparams.width = mFragmentWidth; 
    linearLayout.setLayoutParams(gridparams); 
    if(YouTubeApiServiceUtil.isYouTubeApiServiceAvailable(getActivity())== 
      YouTubeInitializationResult.SUCCESS) 
    { 
     View ytView = super.onCreateView(inflater, container, savedInstanceState); 
     linearLayout.addView(ytView); 
    } 
    else 
     mLogger.e("Either youtube service is down," + 
       " or you dont have required version of YouTube app .." + 
       "\nYouTube Fragment will not work as expected.."); 
    mView = linearLayout; 
    mLogger.i("Preparation youtube view for fragment complete.."); 
    return mView; 
} 

@Override 
public void onInitializationFailure(Provider arg0, 
     YouTubeInitializationResult arg1) 
{ 
    mLogger.e("Youtube player initialization failed"); 
} 

@Override 
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, 
      boolean wasRestored) 
{ 
    mLogger.i("You tube player initialized successfully.. will attempt to stream.."); 
    mYoutubePlayer = player; 
    setListeners(); 
    try 
    { 
     if (!wasRestored) 
     { 
      if(mPlayListFragment) 
       player.loadPlaylist(getResourceID()); 
      else 
       player.loadVideo(getResourceID()); 
     } 
    } 
    catch(Exception e) 
    { 
     mLogger.e("Error loading playlist/video .."+e); 
    } 

} 

public void onResume() 
{ 
    super.onResume(); 
    initialize(API_KEY, this); 
} 
+0

你能告訴我一些你的代碼嗎?我正在嘗試將YoutubePlayerFragment放入網格佈局中。 – pldimitrov 2014-06-05 15:53:07

+0

我只會粘貼代碼,它會給你一個關於我如何構建片段和進行初始化的想法。看到我的編輯上面的想法。請注意,這不是一個完整的答案,只是一個可能有助於解決問題的人的建議 – GodOnScooter 2014-08-01 23:15:01

+0

問候。我有類似的事情,但問題是屏幕保持空白..即使初始化是成功的,它開始播放視頻..但我不能看到任何視頻預覽。你能幫助如何顯示那個,或者分享一些更多的代碼。謝謝。 – 2016-03-10 13:42:37

相關問題