public class MainActivity extends Activity
{
private TextView et;
private String path;
private MediaPlayer mediaPlayer;
private SurfaceView sfv;
private int position;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
et=(TextView)
findViewById(R.id. et);
sfv=(SurfaceView)
findViewById(R.id. sfv);
//告诉surfaceview 不要自己维护缓冲区
而是 等待多媒体播放器的框架 把数据填充过来
sfv.getHolder(). setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//关心surfaceview holder的存活周期
sfv.getHolder().addCallback( new Callback()
{
@Override
public void surfaceDestroyed(SurfaceHolder
holder) {
System. out.println( "holder
被销毁了" );
if( mediaPlayer!= null&& mediaPlayer.isPlaying()){
position = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
mediaPlayer.release();
}
}
@Override
public void surfaceCreated(SurfaceHolder
holder) {
System. out.println( "holder
被创建了" );
if( position>0){
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager. STREAM_MUSIC);
mediaPlayer.setDisplay(holder); //画面显示在哪里
mediaPlayer.setDataSource( path);
//mediaPlayer.prepare();
// might take long! (for buffering, etc)
mediaPlayer.prepareAsync(); //异步的准备
mediaPlayer.setOnPreparedListener( new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer
mp) {
mediaPlayer.start();
mediaPlayer.seekTo( position);
}
});
} catch (Exception
e) {
e.printStackTrace();
}
}
}
@Override
public void surfaceChanged(SurfaceHolder
holder, int format, int width,
int height)
{
System. out.println( "holder
变化了.");
}
});
}
/**
* 开始播放的方法
* @param view
*/
public void
start(View view){
path = et.getText().toString().trim();
File file= new File( path);
if(file.exists()&&file.length()>0){
try {
mediaPlayer= new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager. STREAM_MUSIC);
//让画面显示在sfv上
mediaPlayer.setDisplay( sfv.getHolder());
mediaPlayer.setDataSource( path);
// mediaPlayer.prepare();
mediaPlayer.prepareAsync(); //异步的准备
//设置一个准备完毕之后的监听器
mediaPlayer.setOnPreparedListener( new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer
mp) {
mediaPlayer.start();
}
});
mediaPlayer.start();
} catch (Exception
e) {
e.printStackTrace();
Toast. makeText(getApplicationContext(), "文件格式不正确",
0).show();
}
} else{
Toast. makeText(this , "文件路径不正确" ,
0).show();
return;
}
}
/**
* 暂停播放的方法
* @param view
*/
public void
pause(View view){
Button btpause=(Button) findViewById(R.id. pause);
if( mediaPlayer!= null|| mediaPlayer.isPlaying()){
mediaPlayer.pause();
btpause.setText( "继续");
return;
}
if( "继续".equals(btpause.getText().toString().trim())){
mediaPlayer.start();
btpause.setText( "暂停");
return;
}
}
/**
* 重新开始播放的方法
*/
public void
restart(View view){
if( mediaPlayer!= null|| mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
mediaPlayer= null;
return;
}
restart(view);
}
/**
* 停止播放的方法
*/
public void stop(View
view){
if( mediaPlayer!= null|| mediaPlayer.isPlaying()){
mediaPlayer.stop();
mediaPlayer.release();
return;
}
}
}

1654

被折叠的 条评论
为什么被折叠?



