2012-01-03 311 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(),因为它会完全停止播放,并且在您未播放的视频/歌曲中搜索是没有意义的。