继续使用两个媒体播放器,在这种情况下这样做没有问题。仅使用一个引用意味着您每次想要更改剪辑时都必须重新创建它,或者停止它并调用 setDataSource(context, URI)。
如果您只使用一个对 mediaplayer 的引用,则每次必须播放剪辑时,用户都必须等待剪辑准备好,而在您的实现中,两个声音剪辑都可以随时播放。
无论如何,这是一个 setDataSource 示例:
MediaPlayer mp = MediaPlayer.create(context, firstSongUriOrRes);
public void play(int clip)
{
if(mp.isPlaying()) //Stop the mediaplayer if it's already playing
mp.stop();
switch(clip) //Choose the clip to be played
{
case 0:
mp.setDataSource(context, firstSongUriOrRes);
break;
case 1:
mp.setDataSource(context, secondSongUriOrRes);
break;
}
mp.prepare();
mp.start(); //Start the mediaplayer
}
使用 setDataSource 的另一种方法是将音频文件放在资产目录中并使用以下代码:
AssetFileDescriptor fd = context.getAssets().openFd("pathInsideAssets/fileName");
mp.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getDeclaredLength());