2013-04-30 21 views
6

Tôi đang sử dụng Youtube Android API trình như đã nêu ở đây: https://developers.google.com/youtube/android/player/Nhiều người chơi Youtube trong một hoạt động

Tuy nhiên, tôi không thể nhận được nhiều hơn một đoạn video thành hoạt động của tôi cùng một lúc. Tôi đã cố gắng đơn giản là đặt hai YouTubePlayerViews vào hoạt động như sau:

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

Khi tôi cố gắng này, quan điểm đầu tiên chỉ đi lên đen , trong khi video thứ hai tải. Nếu tôi nhận xét mã trong onCreate() cho video thứ hai thì video đầu tiên sẽ tải.

Có cách nào để đưa nhiều YouTubePlayerView vào cùng một hoạt động không?

+0

Xin xem http://stackoverflow.com/questions/17117164 –

+0

này là của tôi vấn đề quá ... hãy giúp chúng tôi. – Cristiana214

Trả lời

2

Điều này có thể đã quá muộn để có câu trả lời, nhưng gần đây tôi đã gặp vấn đề tương tự. Hy vọng điều này sẽ giúp một người có thể đối mặt với cùng một vấn đề. Bí quyết để giải quyết vấn đề này là sử dụng YoutubePlayerFragments thay thế. Miễn là bạn sử dụng chế độ xem trình phát Youtube, bạn sẽ đạt đến giới hạn áp đặt chỉ một lần khởi tạo được thực hiện từ nhiều yêu cầu. Thông thường khởi tạo thành công cho lần cuối cùng.

Tôi đã kết thúc tạo gridlayout động và đặt chế độ xem đoạn của tôi (động được tạo) trong mỗi ô. Và sau đó tôi khởi tạo thể hiện của người chơi bên trong onResume. Sau khi khởi tạo thành công, bạn sẽ có được một xử lý cho người chơi và bạn có thể trích xuất các video khác nhau một cách ngẫu nhiên trên các đoạn.

tôi sẽ chỉ cần dán mã mà sẽ cung cấp cho bạn một ý tưởng về cách tôi đang xây dựng mảnh và làm khởi:

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

Bạn có thể chỉ cho tôi một số mã của bạn không? Tôi đang cố gắng để đặt một YoutubePlayerFragment trong một gridlayout quá. – pldimitrov

+0

Tôi sẽ chỉ dán mã sẽ cung cấp cho bạn một ý tưởng về cách tôi đang xây dựng các đoạn và thực hiện khởi tạo. Xem chỉnh sửa của tôi ở trên để biết ý tưởng. Hãy nhớ rằng đó không phải là câu trả lời hoàn chỉnh, chỉ là một ý tưởng có thể giúp một người nào đó đối mặt với sự cố số – GodOnScooter

+0

xin chào. Tôi có những điều tương tự nhưng vấn đề là màn hình vẫn trống .. ngay cả khi khởi tạo thành công và nó bắt đầu chơi video .. nhưng tôi không thể nhìn thấy bất kỳ xem trước video. bạn có thể giúp làm thế nào để hiển thị that.or chia sẻ một số mã hơn. cảm ơn. –

Các vấn đề liên quan