mContext.sendBroadcast(i);
if (mediaPlayer != null) {
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(mPreparedListener);
mediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);
isPrepared = false;
Log.v(TAG, “reset duration to -1 in openVideo”);
mDuration = -1;
mediaPlayer.setOnCompletionListener(mCompletionListener);
mediaPlayer.setOnErrorListener(mErrorListener);
mediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);
currentBufferPercentage = 0;
mediaPlayer.setDataSource(mContext, mUri);
mediaPlayer.setDisplay(mSurfaceHolder);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setScreenOnWhilePlaying(true);
mediaPlayer.prepareAsync();
attachMediaController();
} catch (IOException ex) {
Log.w(TAG, "Unable to open content: " + mUri, ex);
return;
} catch (IllegalArgumentException ex) {
Log.w(TAG, "Unable to open content: " + mUri, ex);
return;
}
}
public void setMediaController(MediaController controller) {
if (mediaController != null) {
mediaController.hide();
}
mediaController = controller;
attachMediaController();
}
private void attachMediaController() {
if (mediaPlayer != null && mediaController != null) {
mediaController.setMediaPlayer(this);
View anchorView = this.getParent() instanceof View ?
(View) this.getParent() : this;
mediaController.setAnchorView(anchorView);
mediaController.setEnabled(isPrepared);
}
}
MediaPlayer.OnVideoSizeChangedListener mSizeChangedListener =
new MediaPlayer.OnVideoSizeChangedListener() {
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
videoWidth = mp.getVideoWidth();
videoHeight = mp.getVideoHeight();
if (mMyChangeLinstener != null) {
mMyChangeLinstener.doMyThings();
}
if (videoWidth != 0 && videoHeight != 0) {
getHolder().setFixedSize(videoWidth, videoHeight);
}
}
};
MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
// briefly show the mediacontroller
isPrepared = true;
if (myOnPreparedListener != null) {
myOnPreparedListener.onPrepared(mediaPlayer);
}
if (mediaController != null) {
mediaController.setEnabled(true);
}
videoWidth = mp.getVideoWidth();
videoHeight = mp.getVideoHeight();
if (videoWidth != 0 && videoHeight != 0) {
//Log.i("@@@@", “video size: " + mVideoWidth +”/"+ mVideoHeight);
getHolder().setFixedSize(videoWidth, videoHeight);
if (surfaceWidth == videoWidth && surfaceHeight == videoHeight) {
// We didn’t actually change the size (it was already at the size
// we need), so we won’t get a “surface changed” callback, so
// start the video here instead of in the callback.
if (seekWhenPrepared != 0) {
mediaPlayer.seekTo(seekWhenPrepared);
seekWhenPrepared = 0;
}
if (startWhenPrepared) {
mediaPlayer.start();
startWhenPrepared = false;
if (mediaController != null) {
mediaController.show();
}
} else if (!isPlaying() &&
(seekWhenPrepared != 0 || getCurrentPosition() > 0)) {
if (mediaController != null) {
// Show the media controls when we’re paused into a video and make 'em stick.
mediaController.show(0);
}
}
}
} else {
// We don’t know the video size yet, but should start anyway.
// The video size might be reported to us later.
if (seekWhenPrepared != 0) {
mediaPlayer.seekTo(seekWhenPrepared);
seekWhenPrepared = 0;
}
if (startWhenPrepared) {
mediaPlayer.start();
startWhenPrepared = false;
}
}
}
};
private OnCompletionListener mCompletionListener =
new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
if (mediaController != null) {
mediaController.hide();
}
if (myOnCompletionListener != null) {
myOnCompletionListener.onCompletion(mediaPlayer);
}
}
};
private OnErrorListener mErrorListener =
new OnErrorListener() {
public boolean onError(MediaPlayer mp, int framework_err, int impl_err) {
Log.d(TAG, "Error: " + framework_err + “,” + impl_err);
if (mediaController != null) {
mediaController.hide();
}
/* If an error handler has been supplied, use it and finish. */
if (myOnErrorListener != null) {
if (myOnErrorListener.onError(mediaPlayer, framework_err, impl_err)) {
return true;
}
}
/* Otherwise, pop up an error dialog so the user knows that
-
something bad has happened. Only try and pop up the dialog
-
if we’re attached to a window. When we’re going away and no
-
longer have a window, don’t bother showing the user an error.
*/
if (getWindowToken() != null) {
Resources r = mContext.getResour