Android MediaPlayer Looping - PullRequest
       2

Android MediaPlayer Looping

1 голос
/ 03 января 2012

Я пытаюсь воспроизвести зацикленный файл Ogg, я попытался включить setLooping(true), но это не дало эффекта, поэтому я попытался onCompletionListener, и это тоже не работает, может кто-то уточнить, что я делаю неправильно?

musicPlayer = MediaPlayer.create(mContext, R.raw.overworld);
musicPlayer.setVolume(musicVolume, musicVolume);
// musicPlayer.setLooping(true);

musicPlayer.setOnCompletionListener(new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        musicPlayer.stop();
        musicPlayer.seekTo(0);
        musicPlayer.start();
        Log.d("Sound Manager", "Song Completed");
    }
});

Моя функция воспроизведения:

public void playSong(int id) {
    try {
        stopSong();
        musicPlayer = MediaPlayer.create(mContext, id);                                               
        musicPlayer.start(); 
    } catch(Exception e) {
        // Ignored
    }
}

Ответы [ 3 ]

1 голос
/ 03 января 2012

Известно, что у MediaPlayer возникают проблемы с файлами ogg. Вы могли бы предпочтительно переключиться на другой формат файла.

Другое дело, я бы продолжал пытаться использовать setLooping (булево), так как он, скорее всего, использует ту же схему и гораздо более понятен.

Вызов seekTo (), если объект MediaPlayer остановлен, приводит к тому, что MediaPlayer находится в недопустимом состоянии. Вместо этого вы можете вызвать pause(), но я бы не назвал ни один из этих методов, почему бы просто не искать? Я думаю, если вы удалите musicPlayer.stop(), это будет работать.

0 голосов
/ 09 декабря 2015

onCompletionListener() не вызывается, если ваш MediaPlayer настроен на цикл, НО, если он не установлен на цикл, вы всегда можете просто использовать обработчик завершения, например

@Override
public void onCompletion(MediaPlayer mp) {
    if(!mp.isPlaying()) {
        mp.start();
    }
    mp.seekTo(0);
}

Вы также не должны звонить stop(), потому что это полностью останавливает воспроизведение, и нет смысла искать видео / песню, которую вы не проигрываете.

0 голосов
/ 27 ноября 2012
remove ....
    musicPlayer.stop(); 
from
     onCompletion(MediaPlayer mp) 
...