本文共 1538 字,大约阅读时间需要 5 分钟。
当Activity进入onPause状态之后,SurfaceView会被销毁,进而回调surfaceDestroyed()方法,当你程序从后台切到前台恢复时,SurfaceView并没有重新创建,所以就会出现有声音没画面的情况。
监听SurfaceHolder的callback回调,在surfaceCreated和surfaceDestroyed中处理播放器的播放和停止。代码如下:
getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { Log.d(TAG, "surfaceCreated"); isReady = true; player.setDisplay(getHolder()); if (!"".equals(url) && !player.isPlaying()) { try { player.reset(); player.setDataSource(url); player.prepare(); player.seekTo(position); Log.d(TAG, "续播时间:" + position); } catch (IOException e) { e.printStackTrace(); } } } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { Log.d(TAG, "surfaceChanged"); } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { isReady = false; Log.d(TAG, "surfaceDestroyed"); if (player.isPlaying()) { position = player.getCurrentPosition(); Log.d(TAG, "当前播放时间:" + position); player.stop(); } } });
完整的MediaPlayer+SurfaceView使用例子参考另一片博文。
转载地址:http://mgcqf.baihongyu.com/