Handle player state changes and playback events, by implementing PlayerStateChangeListener and PlaybackEventListener.

To keep track with events and states of Android YouTubePlayer, implement PlayerStateChangeListener and PlaybackEventListener.

Handle player state changes and playback events


Modify from last exercise "Handle initialization error YouTube API Service".

Modify activity_main.xml to add a TextView in layout, to display our log.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="http://arteluzevida.blogspot.com/"
android:textStyle="bold"
android:layout_gravity="center_horizontal"
android:autoLink="web" />

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

<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/youtubeplayerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp" />
<TextView
android:id="@+id/videolog"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>
</ScrollView>

</LinearLayout>


Modify MainActivity.java, to implement PlayerStateChangeListener and PlaybackEventListener.
package com.example.androidyoutubeapiplayer;

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.YouTubePlayer.PlaybackEventListener;
import com.google.android.youtube.player.YouTubePlayerView;
import com.google.android.youtube.player.YouTubePlayer.PlayerStateChangeListener;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends YouTubeBaseActivity implements
YouTubePlayer.OnInitializedListener{

public static final String API_KEY = "AIzaSyCe6tORd9Ch4lx-9Ku5SQ476uS9OtZYsWA";
public static final String VIDEO_ID = "o7VVHhK9zf0";

private YouTubePlayer youTubePlayer;
private YouTubePlayerView youTubePlayerView;
private TextView textVideoLog;

private static final int RQS_ErrorDialog = 1;

private MyPlayerStateChangeListener myPlayerStateChangeListener;
private MyPlaybackEventListener myPlaybackEventListener;

String log = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

youTubePlayerView = (YouTubePlayerView)findViewById(R.id.youtubeplayerview);
youTubePlayerView.initialize(API_KEY, this);

textVideoLog = (TextView)findViewById(R.id.videolog);

myPlayerStateChangeListener = new MyPlayerStateChangeListener();
myPlaybackEventListener = new MyPlaybackEventListener();
}

@Override
public void onInitializationFailure(Provider provider,
YouTubeInitializationResult result) {

if (result.isUserRecoverableError()) {
result.getErrorDialog(this, RQS_ErrorDialog).show();
} else {
Toast.makeText(this,
"YouTubePlayer.onInitializationFailure(): " + result.toString(),
Toast.LENGTH_LONG).show();
}
}

@Override
public void onInitializationSuccess(Provider provider, YouTubePlayer player,
boolean wasRestored) {

youTubePlayer = player;

Toast.makeText(getApplicationContext(),
"YouTubePlayer.onInitializationSuccess()",
Toast.LENGTH_LONG).show();

youTubePlayer.setPlayerStateChangeListener(myPlayerStateChangeListener);
youTubePlayer.setPlaybackEventListener(myPlaybackEventListener);

if (!wasRestored) {
player.cueVideo(VIDEO_ID);
}

}

private final class MyPlayerStateChangeListener implements PlayerStateChangeListener {

private void updateLog(String prompt){
log += "MyPlayerStateChangeListener" + "\n" +
prompt + "\n\n=====";
textVideoLog.setText(log);
};

@Override
public void onAdStarted() {
updateLog("onAdStarted()");
}

@Override
public void onError(
com.google.android.youtube.player.YouTubePlayer.ErrorReason arg0) {
updateLog("onError(): " + arg0.toString());
}

@Override
public void onLoaded(String arg0) {
updateLog("onLoaded(): " + arg0);
}

@Override
public void onLoading() {
updateLog("onLoading()");
}

@Override
public void onVideoEnded() {
updateLog("onVideoEnded()");
}

@Override
public void onVideoStarted() {
updateLog("onVideoStarted()");
}

}

private final class MyPlaybackEventListener implements PlaybackEventListener {

private void updateLog(String prompt){
log += "MyPlaybackEventListener" + "\n-" +
prompt + "\n\n=====";
textVideoLog.setText(log);
};

@Override
public void onBuffering(boolean arg0) {
updateLog("onBuffering(): " + String.valueOf(arg0));
}

@Override
public void onPaused() {
updateLog("onPaused()");
}

@Override
public void onPlaying() {
updateLog("onPlaying()");
}

@Override
public void onSeekTo(int arg0) {
updateLog("onSeekTo(): " + String.valueOf(arg0));
}

@Override
public void onStopped() {
updateLog("onStopped()");
}

}

}


download filesDownload the files.

Download APK to try on your device.



The Tutorial: YouTube Android Player API step-by-step