2012-01-03 214 views
1

我想播放一個循環的Ogg文件,我試過啓用setLooping(true)但這沒有效果,所以我試過onCompletionListener,那也不管用,有人可以澄清我在做什麼錯?Android MediaPlayer循環播放

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 
    } 
} 

回答

1

據瞭解,MediaPlayer正在具有OGG文件的問題。 您最好切換到另一種文件格式。

另一件事是,我會繼續嘗試使用setLooping(boolean),因爲它很可能使用相同的方案,它更清楚。

如果MediaPlayer對象停止,調用seekTo()會導致MediaPlayer處於無效狀態。你可以撥打pause(),但我不會打電話給任何這些方法,爲什麼不只是尋求?我想如果你刪除musicPlayer.stop()它會起作用。

+0

其歌曲不是SFX和同一個文件的Mp3是3MB,而在Ogg格式它是600kb – GideonKain 2012-01-03 19:14:52

+0

@GideonKain我編輯了我的問題:) – poitroae 2012-01-03 19:22:21

+0

沒有變化... Log.d永遠不會顯示在LogCat,聽衆甚至不開火? – GideonKain 2012-01-03 19:56:58

0
remove .... 
    musicPlayer.stop(); 
from 
    onCompletion(MediaPlayer mp) 
0

onCompletionListener()如果您MediaPlayer設置爲循環不叫,但如果你沒有將其設置爲循環,你總是可以只使用一個完成監聽器,如下

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

也不應該調用stop(),因爲它會完全停止播放,並且在您未播放的視頻/歌曲中搜索是沒有意義的。