屏幕旋转,getDuration(),illegalstateexception

时间:2015-12-26 15:19:20

标签: android rotation android-mediaplayer media

我在旋转屏幕后将Media Player恢复到之前的状态时出现问题。我一直试图效仿很多例子,但他们都不适合我。

例如,我一直试图:

protected void onSaveInstanceState(Bundle outState) {
        outState.putInt("position",mp.getCurrentPosition());
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if(savedInstanceState!= null){
            int position = savedInstanceState.getInt("position");
            mp.seekTo(position);
        }
        super.onRestoreInstanceState(savedInstanceState);
    }

然而,它成功完成,然后在run()之后立即触发的以下部分(onRestoreInstanceState()方法)中,我在尝试IllegalStateException时尝试getDuration() {1}}方法:

private Runnable mUpdateTimeTask = new Runnable() {
        @Override
        public void run() {
                long totalDuration = mp.getDuration();
                long currentDuration = mp.getCurrentPosition();
                songCurrentDurationLabel.setText(utilities.milisecondsToString(currentDuration));
                songTotalDurationLabel.setText(utilities.milisecondsToString(totalDuration));

                //ProgressBar
                songProgressBar.setProgress(utilities.getProgressPercentage(currentDuration, totalDuration));

                //invoke that every 100ms
                mHandler.postDelayed(this, 100);
        }
    };

我该怎么做才能让它发挥作用?

2 个答案:

答案 0 :(得分:0)

当屏幕旋转时,您的MediaPlayer实例可能会被终止,因此您需要再次准备MediaPlayer,然后才能调用seekTo方法。

尝试发布您的MediaPlayer准备代码,以便更轻松地进行故障排除。

答案 1 :(得分:0)

如果您的要求是阻止在更改方向期间重新创建活动,则必须告诉您的活动自行处理方向更改。

您可以通过向m.prop元素添加android:configChanges属性来实现此目的。

<activity>