为什么 YouTube Player API 在 Android 11 上不起作用?

为什么 YouTube Player API 在 Android 11 上不起作用?

问题描述:

我尝试了这个 YouTube 视频中解释的如何在 Android 应用上播放 YouTube 视频的项目:

I tried the project explained on this YouTube video of how to play YouTube videos on Android apps:

https://www.youtube.com/watch?v=Up9BjrIuoXY

我尝试在使用 Android 9 和 Android 10 的设备上播放 YouTube 视频,并且视频播放正常,但在 Android 11 设备上,我在 YouTube 视频窗口内收到此消息:

I tried to play YouTube videos with devices using Android 9 and Android 10 and the videos are played correctly, but in Android 11 devices I received this message inside the YouTube video window:

初始化 YouTube 播放器时出错".

这是MainActivity.java的代码:

This is the code of MainActivity.java:

package com.example.youtube;

import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;

import android.widget.Toast;

public class MainActivity extends YouTubeBaseActivity {

    Button play_btn;
    YouTubePlayerView youtubePlayerView;
    YouTubePlayer.OnInitializedListener onInitializedListener;

    private static final int RECOVERY_DIALOG_REQUEST = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        youtubePlayerView = findViewById(R.id.youtubeView);
        play_btn = findViewById(R.id.playvideo_btn);

        final android.app.Activity myActivity = this;

        onInitializedListener =new YouTubePlayer.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
                youTubePlayer.loadVideo("Up9BjrIuoXY");
            }

            @Override
            public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
                if (youTubeInitializationResult.isUserRecoverableError()) {
                    youTubeInitializationResult.getErrorDialog(myActivity, RECOVERY_DIALOG_REQUEST).show();
                } else {
                    String errorMessage = String.format(
                            getString(R.string.error_player), youTubeInitializationResult.toString());
                    Toast.makeText(myActivity, errorMessage, Toast.LENGTH_LONG).show();
                }
            }
        };

        play_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                youtubePlayerView.initialize("AIzaSyZ2", onInitializedListener);
            }
        });

    }
}

Android 11 设备的 YouTube 应用已更新.

YouTube app of the Android 11 devices is updated.

希望有人能帮助我.谢谢!

Hope somebody could help me. Thanks!

由于 Android 11 中的包可见性限制,SDK 将无法找到 Youtube 服务,除非您在清单中添加对它的引用.

With the package visibility restrictions in Android 11 the SDK wont be able to find the Youtube service unless you add a reference to it to your manifest.

<queries>
   <intent>
     <action android:name="com.google.android.youtube.api.service.START" />
   </intent>
</queries>