【问题标题】:How to resume the audio where it is paused?如何恢复暂停的音频?
【发布时间】:2017-05-29 11:06:40
【问题描述】:

我在播放暂停的音频时遇到问题,我想在一个播放按钮中执行三个功能。如果最初按下播放按钮意味着音频应该播放。如果第二次按下播放按钮意味着音频应该暂停再次按下播放按钮意味着音频应该从暂停状态恢复。我尝试了很多方法可以暂停音频,但它再次从头开始播放,而不是从暂停状态恢复音频。

我使用了这个条件if(!mediaPlayer.isPlaying() && mediaPlayer.getCurrentPosition() > 0) but it is not working.

我的工作代码是

    play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(activity, "Playing sound", Toast.LENGTH_SHORT).show();
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.pause();
            }
            if( !mediaPlayer.isPlaying() && mediaPlayer.getCurrentPosition() > 0 ){
                long currentPosition = mediaPlayer.getCurrentPosition();
                mediaPlayer.seekTo((int) currentPosition);
                mediaPlayer.start();
            }

            mediaPlayer.reset();
            try {
                mediaPlayer.setDataSource(path);
                mediaPlayer.setOnPreparedListener((MediaPlayer.OnPreparedListener) activity);
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.start();

            finalTime = mediaPlayer.getDuration();
            startTime = mediaPlayer.getCurrentPosition();

            if (oneTimeOnly == 0) {
                seekBar.setMax((int) finalTime);
                oneTimeOnly = 1;
            }

            songEndTime.setText(String.format("%02d:%02d:%02d",
                    TimeUnit.MILLISECONDS.toHours((long) finalTime),
                    TimeUnit.MILLISECONDS.toMinutes((long) finalTime) -
                            TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours((long) finalTime)), // The change is in this line
                    TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime))));

            songStartTime.setText(String.format("%02d:%02d:%02d",
                    TimeUnit.MILLISECONDS.toHours((long) startTime),
                    TimeUnit.MILLISECONDS.toMinutes((long) startTime) -
                            TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours((long) startTime)),
                    TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime))));



            seekBar.setProgress((int) startTime);
            myHandler.postDelayed(UpdateSongTime, 100);
            stop.setVisibility(View.VISIBLE);
            play.setVisibility(View.GONE);
        }
    });

【问题讨论】:

标签: android android-mediaplayer


【解决方案1】:
mediaPlayer.pause();
length = mediaPlayer.getCurrentPosition();

并且要从最近停止的位置恢复播放器,请执行以下操作:

mediaPlayer.start();    
mediaPlayer.seekTo(length);

【讨论】:

  • 正确的顺序是:--mediaPlayer.start();然后是 mediaPlayer.seekTo(length);
【解决方案2】:

先设置MediaPlayer DataSource,然后去掉“mediaPlayer.reset();” 因为每次单击按钮时它都会重置 MediaPlayer 对象。 这就是为什么它总是从头开始的原因。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2012-08-26
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多