Android 将 youtube 集成到片段中

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26458919/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 11:31:28  来源:igfitidea点击:

Integrating youtube to fragment

androidandroid-fragmentsyoutubefragment

提问by Android Developer

My Activity extends another activity and consists of navigation drawer where each item opens a new fragment.I want to integrate Youtube to one of the fragment..Previously i used YouTubePlayerView to integrate Youtube to activity but here it is required in fragment.I searched on net and found YouTubePlayerFragment to integrate youtube to fragment. But when i searched in tutorials I found that even by using YouTubePlayerFragment we are extending YouTubeBaseActivity .These are the examples.. http://android-coding.blogspot.in/2013/04/example-to-use-youtubeplayerfragment-of.htmlhttp://android-er.blogspot.in/2013/06/example-to-use-youtubeplayerfragment-of.html

我的活动扩展了另一个活动,并由导航抽屉组成,其中每个项目打开一个新片段。我想将 Youtube 集成到其中一个片段中。以前我使用 YouTubePlayerView 将 Youtube 集成到活动中,但这里需要在片段中进行搜索。我搜索了net 并找到 YouTubePlayerFragment 将 youtube 集成到片段中。但是当我在教程中搜索时,我发现即使使用 YouTubePlayerFragment 我们也在扩展 YouTubeBaseActivity 。这些是示例.. http://android-coding.blogspot.in/2013/04/example-to-use-youtubeplayerfragment-of。 html http://android-er.blogspot.in/2013/06/example-to-use-youtubeplayerfragment-of.html

I failed to understand how to use YouTubePlayerFragment such that my class extends Fragment rather than YouTubeBaseActivity which is required in my project..As u can see below my class extends another activity and consists of navigation drawer in which fifth option opens YouTube Fragment.I want to play Youtube video inside this fragment..I am giving brief layout how my classes are-

我无法理解如何使用 YouTubePlayerFragment 以便我的课程扩展 Fragment 而不是我的项目中所需的 YouTubeBaseActivity ..正如您在下面看到的,我的课程扩展了另一个活动并由导航抽屉组成,其中第五个选项打开 YouTube Fragment。我想要在这个片段中播放 Youtube 视频..我给出了我的课程的简要布局 -

public class LandingActivity extends BaseGActivity {
.
.
.
.


public void selectDrawerItem(int position) {

        Bundle args = new Bundle();

        switch (position) {
            case 0:
                currentFragment = new HomeFragment_();
                args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_ALL);
                GApplication.getInstance().stopGPlayer();
                break;
            case 1:
                currentFragment = new HomeFragment_();
                args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_PHOTO);
                GApplication.getInstance().stopGPlayer();
                break;
//
            case 2:
                currentFragment = new HomeFragment_();
                args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_AUDIO);
                GApplication.getInstance().stopGPlayer();
                break;

            case 3:
                currentFragment = new HomeFragment_();
                args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_VIDEO);
                GApplication.getInstance().stopGPlayer();
                break;
            case 4:
                currentFragment = new HomeFragment_();
                args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_MEME);
                GApplication.getInstance().stopGPlayer();
                break;
            case 5:
                currentFragment = new YoutubeFragment();
            default:
                currentFragment = new HomeFragment_();
                args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_ALL);
                GApplication.getInstance().stopGPlayer();
                break;
        }

        currentFragment.setArguments(args);
        FragmentManager frgManager = getFragmentManager();
        frgManager.beginTransaction().replace(R.id.content_frame, currentFragment)
                .commit();

        mDrawerList.setItemChecked(position, true);
        setTitle(dataList.get(position).getItemName());
        mDrawerLayout.closeDrawers();
    }


    public class YoutubeFragment extends Fragment implements YouTubePlayer.OnInitializedListener{
        private FragmentActivity myContext;

        private YouTubePlayer YPlayer;
        private static final String YoutubeDeveloperKey = "xyz";
        private static final int RECOVERY_DIALOG_REQUEST = 1;
        @Override
        public void onAttach(Activity activity) {

            if (activity instanceof FragmentActivity) {
                myContext = (FragmentActivity) activity;
            }

            super.onAttach(activity);
        }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false);

            YouTubePlayerView youTubeView = (YouTubePlayerView) rootView.findViewById(R.id.youtube_view);
            youTubeView.initialize(YoutubeDeveloperKey, (YouTubePlayer.OnInitializedListener) myContext);
            return rootView;
        }
        @Override
        public void onInitializationFailure(YouTubePlayer.Provider provider,
                                            YouTubeInitializationResult errorReason) {
            if (errorReason.isUserRecoverableError()) {
                errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
            } else {
                String errorMessage = String.format(
                        "There was an error initializing the YouTubePlayer",
                        errorReason.toString());
                Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == RECOVERY_DIALOG_REQUEST)
            {

                getYouTubePlayerProvider().initialize(YoutubeDeveloperKey, this);
            }
        }



        @Override
        public void onInitializationSuccess(YouTubePlayer.Provider provider,
                                            YouTubePlayer player, boolean wasRestored) {
            if (!wasRestored) {
                YPlayer = player;
                YPlayer.setFullscreen(true);
                YPlayer.loadVideo("2zNSgSzhBfM");
                YPlayer.play();
            }
        }

    }

YouTubeFragment.java

YouTubeFragment.java

public class YoutubeFragment extends Fragment implements
        YouTubePlayer.OnInitializedListener {
    private FragmentActivity myContext;

private YouTubePlayer YPlayer;
private static final String YoutubeDeveloperKey = "xyz";
private static final int RECOVERY_DIALOG_REQUEST = 1;

@Override
public void onAttach(Activity activity) {

    if (activity instanceof FragmentActivity) {
        myContext = (FragmentActivity) activity;
    }

    super.onAttach(activity);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false);

    YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();

    youTubePlayerFragment.initialize("DEVELOPER_KEY", new YouTubePlayer.OnInitializedListener() {


    });
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
    transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();
    return rootView;

}
    @Override
    public void onInitializationSuccess (YouTubePlayer.Provider provider, YouTubePlayer
    youTubePlayer,boolean b){
        if (!b) {
            YPlayer = youTubePlayer;
            YPlayer.setFullscreen(true);
            YPlayer.loadVideo("2zNSgSzhBfM");
            YPlayer.play();
        }
    }

    @Override
    public void onInitializationFailure (YouTubePlayer.Provider
    provider, YouTubeInitializationResult youTubeInitializationResult){

    }
}

layout

布局

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
        android:id="@+id/youtube_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

Error-

错误-

Error:(64, 101) error: <anonymous com.pc.gi.ui.fragment.YoutubeFragment> is not abstract and does not override abstract method onInitializationFailure(Provider,YouTubeInitializationResult) in OnInitializedListener

回答by Sunny

First extend your Activity as normal

首先像往常一样扩展您的活动

 class YourActivity extends Activity...

in Layout file put the below lines

在布局文件中放置以下几行

<fragment
  android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
  android:id="@+id/youtube_fragment"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"/>

Then in your Activity you can create its instance using below line in your onCreareView method of your Fragment.

然后在您的 Activity 中,您可以在 Fragment 的 onCreareView 方法中使用以下行创建其实例。

YouTubePlayerSupportFragment youTubePlayerFragment = (YouTubePlayerSupportFragment) getActivity().getSupportFragmentManager()
                    .findFragmentById(R.id.youtube_fragment);

or you can declare a FrameLayout in your xml and then initiate the YouTubeSupportFragmentusing below lines

或者你可以在你的 xml 中声明一个 FrameLayout 然后开始YouTubeSupportFragment使用下面的行

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/youtube_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:visibility="visible" />

</RelativeLayout>

Code in your onCreateView

在您的 onCreateView 中编写代码

 YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();

    youTubePlayerFragment.initialize("DEVELOPER_KEY", new OnInitializedListener() {

        @Override
        public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {

            if (!wasRestored) {
                YPlayer = player;
                YPlayer.setFullscreen(true);
                YPlayer.loadVideo("2zNSgSzhBfM");
                YPlayer.play();
            }

        }

        @Override
        public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) {
            // TODO Auto-generated method stub

        }
    });
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
    transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();

The key thing here is to use YouTubePlayerSupportFragmentinstead of YouTubePlayerFragment.

这里的关键是使用YouTubePlayerSupportFragment而不是YouTubePlayerFragment.

Hope this helps.

希望这可以帮助。

Here is your Fragment

这是你的片段

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayer.OnInitializedListener;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import com.google.android.youtube.player.YouTubePlayerSupportFragment;
import com.ismart.omanapp.R;

public class YoutubeFragment extends Fragment {
    private FragmentActivity myContext;

    private YouTubePlayer YPlayer;
    private static final String YoutubeDeveloperKey = "xyz";
    private static final int RECOVERY_DIALOG_REQUEST = 1;

    @Override
    public void onAttach(Activity activity) {

        if (activity instanceof FragmentActivity) {
            myContext = (FragmentActivity) activity;
        }

        super.onAttach(activity);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false);

        YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();

        youTubePlayerFragment.initialize("DEVELOPER_KEY", new OnInitializedListener() {

            @Override
            public void onInitializationSuccess(Provider arg0, YouTubePlayer youTubePlayer, boolean b) {
                if (!b) {
                    YPlayer = youTubePlayer;
                    YPlayer.setFullscreen(true);
                    YPlayer.loadVideo("2zNSgSzhBfM");
                    YPlayer.play();
                }
            }

            @Override
            public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) {
                // TODO Auto-generated method stub

            }
        });

    }
}