2013-09-06 17 views
8

Próbuję odtworzyć wideo w moim Fragmentie. Jednak nie mogę go uruchomić. Jeśli mam rozszerzenie 'YoutubeFailureRecovery' otrzymuję:Jak odtwarzać wideo za pomocą interfejsu API YouTube za pomocą YouTubePlayerFragment?

09-06 21: 56: 40,472: E/Android Runtime (4946): Spowodowany przez: java.lang.IllegalStateException: a YouTubePlayerView mogą być tworzone jedynie w przypadku Aktywność, która rozszerza YouTubeBaseActivity jako kontekst.

To mój xml:

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

I to jest klasa:

public class YoutubeFragment extends YoutubeFailureRecovery { 

    YouTubePlayer player; 
    YouTubePlayerView playerView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle arg2) { 
     // TODO Auto-generated method stub 
     return inflater.inflate(R.layout.detailview, container, false); 
    } 

    @Override 
    public void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 
     playerView = (YouTubePlayerView)getActivity().findViewById(R.id.player); 
     playerView.initialize(DataHolder.DEVELOPER_KEY, this); 

    } 

    @Override 
    public void onInitializationSuccess(Provider provider, YouTubePlayer player, 
             boolean wasRestored) { 
     // TODO Auto-generated method stub 
     player.cueVideo("nCgQDjiotG0"); 
    } 

    @Override 
    protected Provider getYouTubePlayerProvider() { 
     // TODO Auto-generated method stub 
     return playerView; 
    } 
} 


public abstract class YoutubeFailureRecovery extends YouTubePlayerSupportFragment implements YouTubePlayer.OnInitializedListener{ 

ja po prostu nie wiem, co robić. Próbowałem rozszerzyć moją klasę Fragmentów o "YoutubePlayerSupportFragment", próbowałem dodać fragment podobny do wideo w XML, ale nic nie działa (nadmuchiwanie błędów). Może ktoś ma trochę doświadczenia z korzystaniem z YouTube API w Fragmentach?

Odpowiedz

27

YouTubePlayerView działa tylko z działalnością, która rozciąga YouTubeBaseActivity.

Jeśli chcesz użyć Fragments musisz użyć YoutubePlayerFragment/SupportFragment.

Można na przykład stworzyć swój własny fragment, który dziedziczy YoutubePlayerSupportFragment:

public class VideoFragment extends YouTubePlayerSupportFragment { 

    public VideoFragment() { } 

    public static VideoFragment newInstance(String url) { 

     VideoFragment f = new VideoFragment(); 

     Bundle b = new Bundle(); 
     b.putString("url", url); 

     f.setArguments(b); 
     f.init(); 

     return f; 
    } 

    private void init() { 

     initialize("yourapikey", new OnInitializedListener() { 

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

      @Override 
      public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { 
       if (!wasRestored) { 
        player.cueVideo(getArguments().getString("url")); 
       } 
      } 
     }); 
    } 
} 

W kodzie mogłaby wyglądać następująco:

VideoFragment f = VideoFragment.newInstance("your-video-url"); 
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, f).commit(); 

W "fragment_container" w tym przypadku powinna być pusty FrameLayout.

+0

Idealny! Man ... –

+0

@Philipp, Mam podobny problem tutaj, http://goo.gl/V55wsu. Byłbym wdzięczny za każdą radę, którą masz. – DJElbow

+0

Po obróceniu ekranu wideo po prostu znika. Jakieś sugestie? –

Powiązane problemy