您的位置:首页 > 编程语言 > Java开发

java.lang.Illegalargumentexception: the surface has been released

2013-06-26 21:57 736 查看
功能:进入一个activity,使用MediaPlayer和SurfaceView类来播放视频,启动activity时,直接初始化做MediaPlayer.start(),而不是通过一个监听器什么的来启动,就会出现:The surface has been released.

错误位置:mediaplayer.setDisplay(surfaceView.getHost());

原因:mediaPlayer对象没有做好准备。

为什么?想想,如果你做一个监听,那么,视频就不是直接播放了,他有充分时间做准备了,就不会有错误了。

解决方法:写一个通过一个ScheduledExecutorService和Handler类来解决。看代码,不多。[mw_shl_code=java,true]import android.view.SurfaceView;

public class PlayActivity extends Activity {

private static String path,endName;

private SurfaceHolder mSurfaceHolder;

private SurfaceView mSurfaceView;

private MediaPlayer mMediaPlayer;

private ScheduledExecutorService executorService;

private Handler handler;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.play);

initialize();

}

private void initialize(){

executorService = Executors.newScheduledThreadPool(1);

mSurfaceView = (SurfaceView) findViewById(R.id.VideoView01);

mSurfaceHolder = mSurfaceView.getHolder();

mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

Intent i = getIntent();

path = i.getStringExtra("path");

endName = i.getStringExtra("endName");

Log.i("abc", path+","+endName);

handler = new Handler(new Handler.Callback() {

@Override

public boolean handleMessage(Message msg) {

initMedia();

return false;

}

});

executorService.schedule(new Runnable() {

@Override

public void run() {

handler.sendEmptyMessage(0);

}

}, 10000, TimeUnit.MICROSECONDS);

}

private void initMedia(){

mMediaPlayer = new MediaPlayer();

mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

mMediaPlayer.setDisplay(mSurfaceHolder);

try {

mMediaPlayer.setDataSource(path);

mMediaPlayer.prepare();

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalStateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

mMediaPlayer.start();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐