Android играть снова после остановки медиаплеера не работает - PullRequest
0 голосов
/ 02 марта 2019

в моем простом плеере у меня есть кнопки воспроизведения и остановки, а также мультимедийный проигрыватель воспроизведения и паузы. Теперь, после нажатия кнопки «Стоп и воспроизведение», мультимедийный проигрыватель не работает, и я не уверен, в чем проблема, чтобы решить эту проблему

@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);
    }
}

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Проблема в том, что когда вы останавливаете медиаплеер и снова нажимаете кнопку воспроизведения, ваш вызов переходит на mediaplayer.play(), поскольку медиаплеер не равен нулю.

Вам придется обнулить медиаплеер при остановке.Теперь, как только вы остановите медиаплеер и снова нажмете на воспроизведение, он вызовет 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();
    }
}
0 голосов
/ 02 марта 2019

В соответствии с жизненным циклом MediaPlayer, который вы можете просмотреть в руководстве по API Android *1003*, я думаю, что вам нужно позвонить reset() вместо stop(), и после этого снова подготовитьмедиаплеер (используйте только один) для воспроизведения звука с самого начала.Примите также во внимание, что звук, возможно, закончился.Поэтому я бы также рекомендовал реализовать setOnCompletionListener(), чтобы убедиться, что при повторном воспроизведении звука он не выйдет из строя.

enter image description here

...