Perché YouTube Player API non funziona su Android 11?

Sep 16 2020

Ho provato il progetto spiegato in questo video di YouTube su come riprodurre i video di YouTube sulle app Android:

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

Ho provato a riprodurre video di YouTube con dispositivi che utilizzano Android 9 e Android 10 e i video vengono riprodotti correttamente, ma nei dispositivi Android 11 ho ricevuto questo messaggio all'interno della finestra video di YouTube:

"Si è verificato un errore durante l'inizializzazione del player di YouTube".

Questo è il codice di 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);
            }
        });

    }
}

L'app YouTube dei dispositivi Android 11 viene aggiornata.

Spero che qualcuno possa aiutarmi. Grazie!

Risposte

5 ivagarz Nov 08 2020 at 23:56

Con le limitazioni alla visibilità del pacchetto in Android 11, l'SDK non sarà in grado di trovare il servizio Youtube a meno che non si aggiunga un riferimento ad esso al manifest.

<queries>
   <intent>
     <action android:name="com.google.android.youtube.api.service.START" />
   </intent>
</queries>
MisaelL. Oct 08 2020 at 02:45

Bene. Finalmente abbiamo deciso di utilizzare UniWebView poiché il supporto iOS per questa libreria è praticamente zero. Il nostro progetto è mirato per iOS e Android e Google non aggiorna la sua API YouTube da secoli. Utilizza UIWebView che Apple rifiuta dal proprio negozio.