|
1功能:进入一个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();
}
[/mw_shl_code]
该贴已经同步到 LinPeiChun的微博</font |
上一篇: [底层开发教程] 从底层硬件到开发平台--一步步深入Android底下一篇: 在线更新——之实例版!
|