0
	public void onCompletion(Runnable r) {
		onCompletionListener = r;
	} 
 
	private void configureMediaPlayer() { 
		mMediaPlayer = new MediaPlayer();
		mMediaPlayer.setAudioStreamType(AudioTrack.MODE_STREAM);
 
		mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
 
			@Override 
			public void onCompletion(MediaPlayer mp) {
				if (mMediaPlayer.isPlaying()) {
					mp.stop();
				} 
 
				mp.reset();
 
				if (onCompletionListener != null) {
					onCompletionListener.run();
				} 
			} 
		}); 
 
		mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
 
			@Override 
			public void onPrepared(MediaPlayer mp) {
				if (onPreparedListener != null) {
					onPreparedListener.run();
					mp.start();
				} else { 
					mp.start();
				} 
			} 
		}); 
 
		mMediaPlayer.setOnErrorListener(new OnErrorListener() {
 
			@Override 
			public boolean onError(MediaPlayer mp, int what, int extra) {
				// configureMediaPlayer(); 
				if (onErrorListener != null) {
					onErrorListener.run();
					return true; 
				} else { 
					return false; 
				} 
 
			} 
		}); 
 
		mMediaPlayer
				.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
 
					@Override 
					public void onBufferingUpdate(MediaPlayer mp, int percent) {
						if (onBufferingUpdateListener != null) {
							onBufferingUpdateListener.run();
						} 
					} 
				}); 
 
		mMediaPlayer.setOnInfoListener(new OnInfoListener() {
 
			@Override 
			public boolean onInfo(MediaPlayer mp, int what, int extra) {
				if (onInfoListener != null) {
					onInfoListener.run();
					return true; 
				} else { 
					return false; 
				} 
			} 
		}); 
 
		mMediaPlayer.setOnSeekCompleteListener(new OnSeekCompleteListener() {
 
			@Override 
			public void onSeekComplete(MediaPlayer mp) {
				if (onSeekCompleteListener != null) {
					onSeekCompleteListener.run();