2013-04-30 2 views
6

sto usando il Youtube Android Player API come descritto qui: https://developers.google.com/youtube/android/player/più giocatori di Youtube in una sola attività

Tuttavia, non può ottenere più di un video nella mia attività in una sola volta. Ho provato semplicemente mettendo due YouTubePlayerViews nell'attività in questo modo:

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

Quando provo questo, la prima vista arriva solo su nero , mentre il secondo video viene caricato. Se commento il codice in onCreate() per il secondo video, verrà caricato solo il primo video.

C'è un modo per ottenere più YouTubePlayerViews nella stessa attività?

+0

Consulta http://stackoverflow.com/questions/17117164 –

+0

questo è il mio problema anche ... per favore aiutateci. – Cristiana214

risposta

2

Questo potrebbe essere troppo tardi per una risposta, ma ho avuto lo stesso problema di recente. Spero che questo aiuti qualcuno che potrebbe affrontare lo stesso problema. Il trucco per aggirare questo è l'uso di YoutubePlayerFragments. Finché utilizzi la visualizzazione del player di YouTube, otterrai il limite imposto da una sola inizializzazione effettuata su più richieste. In genere l'inizializzazione ha esito positivo per l'ultima.

Ho finito per generare dinamicamente la griglia e posizionare la vista del mio frammento (generato dinamicamente) in ciascuna cella. E poi inizializzo l'istanza di player dentro onResume. Una volta che l'inizializzazione è andata a buon fine, avrai una mano sul giocatore, e potrai citare video diversi a caso sui frammenti.

mi limiterò a incollare il codice che vi darà un'idea di come sto costruendo frammenti e fare l'inizializzazione:

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

Potresti mostrarmi parte del tuo codice? Sto anche cercando di inserire un oggetto YoutubePlayerFragment in una griglia. – pldimitrov

+0

Inserirò il codice che ti darà un'idea di come sto costruendo i frammenti e faccio l'inizializzazione. Vedi la mia modifica sopra per un'idea. Intendiamoci non è una risposta completa, solo un'idea che potrebbe aiutare qualcuno di fronte al problema – GodOnScooter

+0

ciao. ho la cosa simile ma il problema è che lo schermo rimane vuoto .. anche l'inizializzazione ha successo e inizia a riprodurre video .. ma non posso vedere alcuna anteprima video. puoi aiutare come mostrare quello. o condividere altro codice. Grazie. –