android - 在Android上使用Youtube Api播放新视频

标签 android youtube

我正在使用Android Studio开发一个需要Youtube API的应用程序。问题是我想播放视频
每次用户单击“再现”(“播放”)时。所以我研究了如何加载视频,每个人都说要使用该功能
初始化将调用onInitializationSuccess并在此处播放。但是,如果我想加载新视频,则无法解析URL并播放新视频。每当用户单击Reproducir时,我都尝试调用初始化,但在这种情况下,它会触发。

public class AddVideoActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener{
private YouTubePlayerView youTubeView;
private EditText urlTxtView;
private Button playButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_video);
    youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_player_add);
    urlTxtView = (EditText) findViewById(R.id.urlYoutube);
    playButton = (Button) findViewById(R.id.buttonPlay);
    playButton.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view) {
        youTubeView.initialize(Config.YOUTUBE_API_KEY, (YouTubePlayer.OnInitializedListener) view.getContext());
    }
});

}

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
    String url = urlTxtView.getText().toString();
    Log.d("1",url );
    youTubePlayer.loadVideo("a4NT5iBFuZs");

}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult result) {
    Toast.makeText(this, "ERROR:"+result.toString(), Toast.LENGTH_LONG).show();

}

XML布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/action_add_video"
        android:textStyle="normal|bold"
        android:textSize="30sp"
        android:gravity="center_horizontal"
        android:layout_marginBottom="20dp" />

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

    <EditText
        android:id="@+id/tituloVideo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Titulo"
        android:inputType="textPersonName" />

    <EditText
        android:id="@+id/urlYoutube"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="URL o buscar con @youtube"
        android:inputType="textPersonName" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/buttonCancelar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Cancelar" />
        <Button
            android:id="@+id/buttonPlay"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Reproducir" />
        <Button
            android:id="@+id/buttonGuardar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Guardar" />
    </LinearLayout>

</LinearLayout>

日志:
W / YouTubeAndroidPlayerAPI:由于播放器顶部的未授权覆盖,导致YouTube视频播放停止。 YouTubePlayerView被android.view.View {a21cb6f V.ED .... ................. 0,0-768,50#102002f android:id / statusBarBackground}遮盖了。底边YouTubePlayerView顶边下方36像素。 。

这里有一个想法的图像:

Picture of Android emulator, the user should introduce an url, clicks on Reproducir and plays the video from the url

最佳答案

如果要重新初始化youtube视频视频 View (如果已先初始化),则需要释放现有的youtube View 。
请检查以下代码
具体来说,我已经更改了“播放”按钮单击上的“初始化”部分

playButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (youTubePlayer != null) {
                    youTubePlayer.release();
                }
                youTubeView.initialize("AIzaSyDo9p_Qjy8XRBdFnVOaIx586MzHHLOUopw", (YouTubePlayer.OnInitializedListener) view.getContext());
            }
        });
整个 Activity 代码
 public class AddVideoActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
        private YouTubePlayerView youTubeView;
        private EditText urlTxtView;
        private Button playButton;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_add_video);
            youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_player_add);
    
            urlTxtView = (EditText) findViewById(R.id.urlYoutube);
            playButton = (Button) findViewById(R.id.buttonPlay);
            playButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (youTubePlayer != null) {
                        youTubePlayer.release();
                    }
                    youTubeView.initialize(Config.YOUTUBE_API_KEY, (YouTubePlayer.OnInitializedListener) view.getContext());
                }
            });
    
        }
    
        private YouTubePlayer youTubePlayer;
    
        @Override
        public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) {
            this.youTubePlayer = youTubePlayer;
            String url = urlTxtView.getText().toString();
            Log.d("1", url);
            if (!wasRestored) {/// here videoid you need to pass not entire video URL
                youTubePlayer.loadVideo(url);
            }
    
    
        }
    
        @Override
        public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult result) {
            Toast.makeText(this, "ERROR:" + result.toString(), Toast.LENGTH_LONG).show();
    
        }
    }
要加载视频,您需要传递视频ID而不是视频URL。因此,假设在编辑文本中传递了视频ID,或者如果传递了URL,那么您将从URL获得视频ID并加载视频
this.youTubePlayer = youTubePlayer;
                String url = urlTxtView.getText().toString();
                Log.d("1", url);
                if (!wasRestored) {/// here videoid you need to pass not entire video URL
                    youTubePlayer.loadVideo(url);
                }
        
和下面的日志

Log: W/YouTubeAndroidPlayerAPI: YouTube video playback stopped due to unauthorized overlay on top of player. The YouTubePlayerView is obscured by android.view.View{a21cb6f V.ED.... ........ 0,0-768,50

102002f android:id/statusBarBackground}. Bottom edge 36 px below YouTubePlayerView's top edge.


你可以引用答案https://stackoverflow.com/a/29676512/1140237
对于您的情况,此日志...问题与应用程序或 Activity 主题有关。不提供ActionBarTheme解决该错误

关于android - 在Android上使用Youtube Api播放新视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42343389/

相关文章:

Android 接收器 - 多个应用程序中接收器的名称和操作相同

.net - Youtube .net api - 在播放列表中搜索

Android:如何在 xml 中平衡 GridLayout

java - 使用第 3 方库的微调器时出现 setOnItemSelectedListener 错误

android - 仅显示一个 DialogFragment

css - jQuery 对话框中的 Youtube 视频始终位于其他内容之上

spring-mvc - 如何用spring建立一个像twitch一样的流媒体网站

android - Jetpack 撰写 : How to create a rating bar?

python - 有没有办法获取新的YouTube订阅者的电子邮件? python

youtube - 如何获取YouTube API v3中PlaylistItems中列出的视频的 channel ID?