9

Ich verwende die Android-YouTube-API-Beispiele, um einen chromfreien YouTube-Player in meiner App zu erstellen. Ich habe ein Problem, dass der Fortschrittsbalken für das Laden/Laden weiterhin über mein Video angezeigt wird, auch nachdem es geladen und gestartet wurde. Ich kann mit ein paar kleinen Änderungen dies in der FragmentDemoActivity Probe zu reproduzieren:YouTube Android-API: YouTubePlayerFragment loading spinner

public class FragmentDemoActivity extends AppCompatActivity implements YouTubePlayer.OnInitializedListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.fragments_demo); 

     YouTubePlayerFragment youTubePlayerFragment = 
      (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment); 
     youTubePlayerFragment.initialize(DeveloperKey.DEVELOPER_KEY, this); 
    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, 
      boolean wasRestored) { 
     if (!wasRestored) { 
      player.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS); 
      player.loadVideo("nCgQDjiotG0", 10); 
     } 
    } 

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

} 

I FragmentDemoActivity geändert haben von AppCompatActivity statt YouTubeFailureRecoveryActivity, erben, wie die Dokumentation sagt, ist gut zu tun. Ich habe auch den Player-Stil geändert, um in onInitializationSuccess chromlos zu sein. Schließlich habe ich cueVideo zu loadVideo geändert, nur um automatische Wiedergabe auszulösen.

Dies geschieht auf mehreren Geräten einschließlich Nexus 5X. Ich benutze Bibliothek Version 1.2.2. In onInitializationFailure wird kein Fehler ausgelöst.

Das Video wird nach dem Puffern abgespielt. Der Spieler ist chromlos. Der Pufferspinner verschwindet jedoch nie. Ist das ein Fehler, oder mache ich etwas, was ich nicht tun darf?

+1

Dies scheint ein Duplikat von http://stackoverflow.com/questions/35202945/youtubeapi-loader-doesnt-disppear zu sein, aber hoffentlich mit einem reproduzierbaren Bit Code zu arbeiten. –

Antwort

10

Ich bin auch auf dieses Problem gestoßen, es sieht wirklich wie ein Fehler aus. Hier ist, wie ich es geschafft habe, es zu umgehen.

Setzen Sie in Ihrer onInitializationSuccess eine PlaybackEventListener auf die player. Überschreiben Sie die onBuffering und etwas tun, wie folgt aus:

ViewGroup ytView = (ViewGroup)ytPlayerFragment.getView(); 
ProgressBar progressBar; 
try { 
    // As of 2016-02-16, the ProgressBar is at position 0 -> 3 -> 2 in the view tree of the Youtube Player Fragment 
    ViewGroup child1 = (ViewGroup)ytView.getChildAt(0); 
    ViewGroup child2 = (ViewGroup)child1.getChildAt(3); 
    progressBar = (ProgressBar)child2.getChildAt(2); 
} catch (Throwable t) { 
    // As its position may change, we fallback to looking for it 
    progressBar = findProgressBar(ytView); 
    // TODO I recommend reporting this problem so that you can update the code in the try branch: direct access is more efficient than searching for it 
} 

int visibility = isBuffering ? View.VISIBLE : View.INVISIBLE; 
if (progressBar != null) { 
    progressBar.setVisibility(visibility); 
    // Note that you could store the ProgressBar instance somewhere from here, and use that later instead of accessing it again. 
} 

Die findProgressBar Methode, als Ausweich nur für den Fall verwendet, um die YouTube-Code-Änderungen:

private ProgressBar findProgressBar(View view) { 
    if (view instanceof ProgressBar) { 
     return (ProgressBar)view; 
    } else if (view instanceof ViewGroup) { 
     ViewGroup viewGroup = (ViewGroup)view; 
     for (int i = 0; i < viewGroup.getChildCount(); i++) { 
      ProgressBar res = findProgressBar(viewGroup.getChildAt(i)); 
      if (res != null) return res; 
     } 
    } 
    return null; 
} 

Diese Lösung funktioniert völlig in Ordnung für mich, so dass der ProgressBar wenn der Spieler es puffert und deaktiviert, wenn es nicht ist.

EDIT: Wenn jemand mit dieser Lösung entdeckt, dass dieser Fehler behoben wurde oder dass die Position des ProgressBar hat sich geändert, bitte teilen, so dass ich meine Antwort bearbeiten können, danke!

+1

Ja! Diese Problemumgehung macht den Trick für mich - ich werde verwenden, bis sie den Fehler beheben. Danke vielmals! – danwilkie

Verwandte Themen