0

这是我的视频播放器活动:

public class myActivity extends Activity
         implements MediaPlayer.OnPreparedListener, 
                    MediaController.MediaPlayerControl {
....
}

并且在它的onPause方法中我不发布MediaPlayer并且我只是pause它:

@Override
protected void onPause() {
    super.onPause();
    lastPlaybackInfo.IsPlaying = mMediaPlayer.isPlaying();
    mMediaPlayer.pause();
    lastPlaybackInfo.SeekPosition = mMediaPlayer.getCurrentPosition();
}

并且在onResume

@Override
protected void onResume() {
    super.onResume();
        if (mMediaPlayer != null) {
            if (lastPlaybackInfo.IsPlaying) {
                mMediaPlayer.start();
            } else {
                mMediaPlayer.seekTo(lastPlaybackInfo.SeekPosition);
            }
            mMediaController.show();
        }
}

和 onTouchEvent:

@Override
public boolean onTouchEvent(MotionEvent event) {
            mMediaController.show();
            return true;
}

我有两个问题:

  1. 第一个问题是,一旦应用程序恢复,MediaController所绑定的MediaPlayer仅显示一次(调用 in onResume),之后调用onTouchEvent不显示MediaController

  2. 第二个是,如果MediaPlayer在应用程序暂停之前暂停,则在恢复应用程序后,SurfaceView绑定MediaPlayer为黑色并且不显示最后渲染的帧。

4

1 回答 1

0

事实上,我发现如果我们onResume延迟运行代码以让布局自行刷新,这两个问题都会得到解决。

就是这样:

protected void onResume() {
    super.onResume();
    try {
        if (IsMediaReady && IsSubtitleReady) {
            if (mMediaPlayer != null) {

                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (lastPlaybackInfo.IsPlaying) {
                            mMediaPlayer.start();
                        } else {
                            mMediaPlayer.seekTo(lastPlaybackInfo.SeekPosition);
                        }
                        mMediaController.show();
                    }
                }, 100);

            }
        }
    } catch (NullPointerException e) {
        Log.e(TAG, "Exception in resume");
    }
}
于 2013-04-02T03:12:24.817 回答