Android停止Media Player后再次播放不起作用

3
在我的简易播放器中,我有播放和停止按钮,播放和暂停媒体播放器运行良好。现在,在单击停止后再次单击播放时,媒体播放器无法工作,我不确定如何解决这个问题。
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ...

    playMonthLesson();

    ...
}

@SuppressLint("DefaultLocale")
public void playMonthLesson() {
    try {
        mediaPlayer.reset();
        mediaPlayer.setDataSource(CoreApplication.MEDIAFOLDER + "/" + lesson.getFilename());
        mediaPlayer.prepare();
        mediaPlayer.start();
        lesson_play.setImageResource(R.drawable.ic_pause);
        int totalDuration = mediaPlayer.getDuration();

        // set Progress bar values
        lesson_progress_bar.setProgress(curretLessonProgress);
        lesson_progress_bar.setMax(100);

        // Updating progress bar
        updateProgressBar();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@OnClick(R.id.lesson_play)
public void lesson_play(View view) {
    if (mediaPlayer == null) {
        playMonthLesson();
    } else if (mediaPlayer.isPlaying()) {
        if (mediaPlayer != null) {
            mediaPlayer.pause();
            // Changing button image to play button
            lesson_play.setImageResource(R.drawable.ic_play);
        }
    } else {
        // Resume song
        if (mediaPlayer != null) {
            mediaPlayer.start();
            // Changing button image to pause button
            lesson_play.setImageResource(R.drawable.ic_pause);
        }
    }
}

@OnClick(R.id.lesson_stop)
public void setLesson_stop(View view) {
    if (mediaPlayer != null) {
        mediaPlayer.stop();
        lesson_play.setImageResource(R.drawable.ic_play);
        lesson_progress_bar.setProgress(0);
    }
}

你能确保onCreateView在完成后不会再次被调用吗?尝试使用调试器或记录器找出原因。你可以在代码中的几个步骤中使用它,找出重复的地方。 - Sahdeep Singh
2个回答

1
根据Android API指南中所示的MediaPlayer生命周期,我认为您需要调用reset()而不是stop(),然后再次准备媒体播放器(仅使用一个)以从头开始播放声音。还要考虑到声音可能已经结束。因此,我建议实现setOnCompletionListener(),以确保如果您尝试重新播放声音,则不会失败。

enter image description here


0
问题在于当您停止mediaplayer并再次点击播放时,您的调用将转到mediaplayer.play(),因为mediaplayer不为空。
您必须在停止方法上将mediaPlayer设置为null。现在,一旦您停止mediaplayer并再次点击播放,它将调用playMonthLesson();

@OnClick(R.id.lesson_stop)
public void setLesson_stop(View view) {
    if (mediaPlayer != null) {
        mediaPlayer.stop();
        mediaPlayer.reset();
        mediaPlayer = null;
        lesson_play.setImageResource(R.drawable.ic_play);
        lesson_progress_bar.setProgress(0);
    }
}

修改这段代码,

@SuppressLint("DefaultLocale")
public void playMonthLesson() {
    try {
        mediaPlayer = new MediaPlayer();
        mediaPlayer.reset();
        mediaPlayer.setDataSource(CoreApplication.MEDIAFOLDER + "/" + lesson.getFilename());
        mediaPlayer.setOnPreparedListener(new OnPreparedListener(){

        @Override
            public void onPrepared(MediaPlayer mp) {
               mp.start();
               lesson_play.setImageResource(R.drawable.ic_pause);
               int totalDuration = mediaPlayer.getDuration();
            }
        });
        mediaPlayer.prepareAsync();  
        // set Progress bar values
        lesson_progress_bar.setProgress(curretLessonProgress);
        lesson_progress_bar.setMax(100);

        // Updating progress bar
        updateProgressBar();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}


谢谢,但媒体不再播放。 - DolDurma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接