Как воспроизвести видео с помощью API YouTube с помощью YouTubePlayerFragment?
Я пытаюсь воспроизвести видео в своем фрагменте. Однако, я не могу заставить его работать. Если я расширяю "YoutubeFailureRecovery", я получаю:
09-06 21:56:40.472: E / AndroidRuntime (4946): вызвано: java.ленг.IllegalStateException: YouTubePlayerView может быть создан только с действием, которое расширяет YouTubeBaseActivity в качестве его контекста.
Это моя .XML-код:
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/player"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
и это класс:
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{
Я просто не знаю, что делать. Я попытался расширить свой класс фрагментов с помощью "YoutubePlayerSupportFragment", попытался добавить видео-подобный фрагмент в XML, но ничего не работает (ошибка раздувания). Может быть, у кого-то есть опыт использования YouTube API во фрагменте?
1 ответов
YouTubePlayerView работает только с активностью, которая выходит YouTubeBaseActivity.
Если вы хотите использовать фрагменты вы должны использовать YoutubePlayerFragment / SupportFragment.
вы можете, например, создать свой пользовательский фрагмент, который наследуется от 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"));
}
}
});
}
}
в коде это может выглядеть так:
VideoFragment f = VideoFragment.newInstance("your-video-url");
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, f).commit();
В "fragment_container" в этом случае должен быть пустой FrameLayout.