【问题标题】:Playing new videos with Youtube Api on Android在 Android 上使用 Youtube Api 播放新视频
【发布时间】:2017-07-09 15:54:52
【问题描述】:

我正在使用需要 Youtube API 的 Android Studio 开发应用。问题是我想要播放视频 每次用户点击“Reproducir”(“play”)。所以我研究了如何加载视频,每个人都说要使用该功能 初始化将调用 onInitializationSuccess 并在那里播放。但是,如果我想加载新视频,解析 url 并播放新视频,我不能。每次用户单击 Reproducir 时,我都尝试调用初始化,但在这种情况下它 ig。

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

【问题讨论】:

  • 任何错误或崩溃日志? api 密钥已正确给出并从 api 控制台启用?
  • 没有崩溃日志,而且密钥很好,因为如果我初始化一次它就可以了,就像它不能被初始化多次一样。因此,也许解决方案类似于从另一种方式获取播放器并加载视频而无需再次初始化
  • 抱歉,有一个日志:W/YouTubeAndroidPlayerAPI:YouTube 视频播放因播放器顶部未经授权而停止播放。 YouTubePlayerView 被 android.view.View{a21cb6f V.ED.... ........ 0,0-768,50 #102002f android:id/statusBarBackground} 遮挡。底部边缘低于 YouTubePlayerView 顶部边缘 36 像素。 .
  • 发布您的整个代码.. screen xml 吗?

标签: android youtube


【解决方案1】:

如果您要重新初始化 youtube 视频视频视图(如果它已经被初始化),那么首先您需要释放现有的 youtube 视图。

请检查以下代码 具体来说,我已经改变了播放按钮点击的初始化部分

playButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (youTubePlayer != null) {
                    youTubePlayer.release();
                }
                youTubeView.initialize("AIzaSyDo9p_Qjy8XRBdFnVOaIx586MzHHLOUopw", (YouTubePlayer.OnInitializedListener) view.getContext());
            }
        });

整个活动代码

 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);
                }
        

对于下面的日志

日志:W/YouTubeAndroidPlayerAPI:YouTube 视频播放因以下原因而停止 未经授权覆盖在播放器顶部。 YouTubePlayerView 是 被 android.view.View{a21cb6f V.ED.... ........ 0,0-768,50

遮挡

102002f android:id/statusBarBackground}。底部边缘低于 YouTubePlayerView 顶部边缘 36 像素。

您可以参考答案https://stackoverflow.com/a/29676512/1140237

在您的情况下,此日志...问题与应用程序或活动主题有关。 Give No ActionBarTheme 以解决该错误

【讨论】:

  • 原来如此,非常感谢。我真的被那件事困住了。我会处理主题的事情。
猜你喜欢
  • 2015-02-14
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
相关资源
最近更新 更多