Monday, April 18, 2016

Add MediaController to MediaPlayer


This example show how to add MediaController to simple MediaPlayer in previous example.


MainActivity.java
package com.blogspot.android_er.androidmediaplayer;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.MediaController;
import android.widget.Toast;

import java.io.IOException;

public class MainActivity extends AppCompatActivity
implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener,
MediaController.MediaPlayerControl {

private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private MediaPlayer mediaPlayer;

private MediaController mediaController;
private Handler handler = new Handler();


String videoSource =
"https://sites.google.com/site/androidexample9/download/RunningClock.mp4";

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

surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);

surfaceView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(mediaController != null){
mediaController.show();
}
return false;
}
});


}

@Override
public void surfaceCreated(SurfaceHolder holder) {

Toast.makeText(MainActivity.this,
"surfaceCreated()", Toast.LENGTH_LONG).show();
mediaPlayer = new MediaPlayer();
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(this);
try {
mediaPlayer.setDataSource(videoSource);
mediaPlayer.prepare();

mediaController = new MediaController(this);

} catch (IOException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this,
"something wrong!\n" + e.toString(),
Toast.LENGTH_LONG).show();
}
}

@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}

@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
Toast.makeText(MainActivity.this,
"onPrepared()", Toast.LENGTH_LONG).show();

mediaController.setMediaPlayer(this);
mediaController.setAnchorView(surfaceView);
handler.post(new Runnable() {

public void run() {
mediaController.setEnabled(true);
mediaController.show();
}
});

}

@Override
public void start() {
mediaPlayer.start();
}

@Override
public void pause() {
mediaPlayer.pause();
}

@Override
public int getDuration() {
return mediaPlayer.getDuration();
}

@Override
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}

@Override
public void seekTo(int pos) {
mediaPlayer.seekTo(pos);
}

@Override
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}

@Override
public int getBufferPercentage() {
return 0;
}

@Override
public boolean canPause() {
return true;
}

@Override
public boolean canSeekBackward() {
return true;
}

@Override
public boolean canSeekForward() {
return true;
}

@Override
public int getAudioSessionId() {
return mediaPlayer.getAudioSessionId();
}

}


For layout and permission, refer to the previous post "MediaPlayer example to play video from Internet".


No comments:

Post a Comment