2013-04-30 13 views
6

ここで概説として私は、YouTubeのAndroidプレーヤAPIを使用しています:https://developers.google.com/youtube/android/player/複数のYouTubeプレーヤー

しかし、私は一度に私の活動の中に複数のビデオを取得することはできません。私はこれをしようとすると、最初のビューが黒く立ち上がる

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

MainActivity.java

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> 

:私は単にそのように活動に2 YouTubePlayerViewsを入れてみました2番目のビデオが読み込まれます。 onCreate()で2番目のビデオのコードをコメントアウトすると、最初のビデオだけが読み込まれます。

複数のYouTubePlayerViewを同じアクティビティに参加させる方法はありますか?

+0

これが私ですhttp://stackoverflow.com/questions/17117164 –

+0

を参照してください。問題も...助けてください。 – Cristiana214

答えて

2

これは回答が遅すぎるかもしれませんが、最近同じ問題が発生しました。同じ問題に直面するかもしれない誰かにこれが役立つことを願っています。これを回避するには、代わりにYoutubePlayerFragmentsを使用することです。 Youtubeプレーヤービューを使用している限り、複数のリクエストから1回の初期化だけが行われます。通常、初期化は最後のものに対して成功します。

私は動的にgridlayoutを生成し、自分の(動的に生成された)フラグメントのビューを各セルに配置しました。そして、私はonResume内のplayerのインスタンスを初期化します。初期化が成功すると、プレーヤーにハンドルを渡します。また、フラグメントごとに異なる動画をランダムにキューすることもできます。

私はちょうどあなたに私は断片を構築し、初期化をやっている方法についてのアイデアを与えるだろうコードを貼り付けます:

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をgridlayoutに配置しようとしています。 – pldimitrov

+0

フラグメントを構築して初期化を行う方法についてのアイデアを与えるコードを貼り付けます。アイデアについては上記の私の編集を参照してください。完全な答えではないことを覚えておいてください。誰かが問題に直面するのを助けるかもしれないアイデア – GodOnScooter

+0

こんにちは。私は似たようなことがありますが、問題は画面が空白のままです..初期化に成功してもビデオが再生されますが、ビデオプレビューは表示されません。あなたはそれを表示する方法を助けることができますか、いくつかのコードを共有してください。ありがとう。 –

関連する問題