更改方向后播放位置重置为零

问题描述

下面是我的音乐播放器的代码。我使用Videoview播放本地精选歌曲列表。 我想在方向改变(人像/风景)时存储并恢复播放位置。

我使用过onSaveInstanceState和onRestoreInstanceState方法。构建上没有错误,但每次歌曲仍会重置。

我不知道怎么了。

package io.automaton.android.morningbinge;

import androidx.appcompat.app.AlertDialog;
import android.app.Activity;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Toast;
import android.widget.VideoView;
import android.widget.MediaController;

import java.util.ArrayList;

public class MainActivity extends Activity
        implements MediaPlayer.OnCompletionListener {


        VideoView vw;
        ArrayList<Integer> videolist = new ArrayList<>();
        int currvideo = 0;
        int mPositionWhenPaused=0;
    @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            vw = (VideoView)findViewById(R.id.videoView);
            vw.setMediaController(new MediaController(this));
            vw.setOnCompletionListener(this);

            // video name should be in lower case alphabet.
            videolist.add(R.raw.onbadhu_kolum);
            videolist.add(R.raw.kala_bhairava_ashtakam);
            videolist.add(R.raw.panchamukh_hanumath_kavacham);
            videolist.add(R.raw.kandha_shashti_kavasam);
            setVideo(videolist.get(0));
        }
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        //we use onSaveInstanceState in order to store the video playback position for orientation change
        savedInstanceState.putInt("Position",vw.getCurrentPosition());
        vw.pause();
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        //we use onRestoreInstanceState in order to play the video playback from the stored position
        mPositionWhenPaused = savedInstanceState.getInt("Position");
        vw.seekTo(mPositionWhenPaused);
    }

    public void setVideo(int id)
        {
            String uriPath
                    = "android.resource://"
                    + getPackageName() + "/" + id;
            Uri uri = Uri.parse(uriPath);
            vw.setVideoURI(uri);
            vw.start();
        }

        public void onCompletion(MediaPlayer mediapalyer)
        {
            AlertDialog.Builder obj = new AlertDialog.Builder(this);
            obj.setTitle("Playback Finished!");
            obj.setIcon(R.mipmap.ic_launcher);
            MyListener m = new MyListener();
            obj.setPositiveButton("Replay",m);
            obj.setNegativeButton("Next",m);
            obj.setMessage("Want to replay or play next video?");
            obj.show();
        }

        class MyListener implements DialogInterface.OnClickListener {
            public void onClick(DialogInterface dialog,int which)
            {
                if (which == -1) {
                    vw.seekTo(0);
                    vw.start();
                }
                else {
                    ++currvideo;
                    if (currvideo == videolist.size())
                        currvideo = 0;
                    setVideo(videolist.get(currvideo));
                }
            }
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)