Android Bugs——解决MediaPlayer+SurfaceView程序切换到后台再恢复播放,有声音没画面问题

原因:

当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使用例子参考另一片博文MediaPlayer+SurfaceView完整例子

猜你喜欢

转载自blog.csdn.net/u012230055/article/details/80597103