Как да възпроизвеждам видеоклип с API на YouTube с помощта на YouTubePlayerFragment?

Опитвам се да пусна видео в моя фрагмент. Въпреки това не мога да го накарам да работи. Ако удължавам „YoutubeFailureRecovery“, получавам:

09-06 21:56:40.472: E/AndroidRuntime(4946): Причинено от: java.lang.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{

Просто не знам какво да правя. Опитах се да разширя моя клас Fragment с „YoutubePlayerSupportFragment“, опитах се да добавя фрагмент, подобен на видео в XML, но нищо не работи (грешка при надуване). Може би някой има опит с използването на API на YouTube във Fragment?


person kort.es    schedule 06.09.2013    source източник


Отговори (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.

person Philipp Jahoda    schedule 06.09.2013
comment
@Philipp, имам подобен проблем тук, goo.gl/V55wsu . Ще се радвам на всеки ваш съвет. - person DJElbow; 05.01.2015
comment
Когато завъртя екрана, видеото просто изчезва. Някакви предположения? - person Nicolás Arias; 27.05.2015
comment
Благодаря, това ми помогна, но как мога да направя този фрагмент да използва пълен родителски изглед - person Aayushi; 11.06.2015
comment
@Phipipp Ти си гений - person Ravi; 10.12.2015
comment
Все още работи през 2016 г.!! :D пробата от гугъл не помага особено. Много благодаря - person wax911; 09.10.2016
comment
Можем ли да покажем 2 видеоклипа в една и съща дейност с това решение? Имам предвид например: VideoFragment f = VideoFragment.newInstance(url); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, f).commit() VideoFragment f2 = VideoFragment.newInstance(url2l); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, f2).commit() - person gamerounet; 29.06.2017
comment
url не работи за мен. Трябваше да използвам videoId вместо URL адреса - person Alan Nelson; 19.11.2018