2013-09-16 43 views
-1

我必须要2首歌曲。我对这两首歌曲都使用了单选按钮,所以当选择第一首时,它应该播放第一首歌曲,当我点击第二首歌曲时。第二首歌曲应该播放。我已经使用了播放,暂停和停止按钮,所以当我选择第一首歌曲并点击播放第一首歌曲时,应该播放如何使用媒体播放器播放两首歌曲。以前我使用过两种媒体播放器播放不同的歌曲。如何使用一个媒体播放器。
以前我已经用过这两个歌曲的声明我可以用单个MediaPlayer播放多首歌曲吗

mediaPlayer = MediaPlayer.create(getApplicationContext(),R.drawable.inno);

mediaPlayer1 = MediaPlayer.create(getApplicationContext(),R.drawable.rocky);

我的问题是,我想只用一个媒体播放器使用两个mediaplayers保持两首歌曲

+0

你可以['setDataSource'](http://developer.android.com/reference/android/media/MediaPlayer.html#setDataSource%28java.lang.String%29)等一次你点击按钮。 – zapl

+0

明确告诉我 –

+0

任何人都可以帮我解决这个问题 –

回答

0

,在类似案例,是没有问题的这样做。只使用一个引用意味着每次想要更改剪辑或停止它并调用setDataSource(context,URI)时,都必须重新创建它。

如果您只使用一个媒体播放器引用,用户将不得不等待剪辑准备就绪,每次播放时都会准备好,而在您的实现中,这两个声音剪辑随时可以播放。

不管怎么说,这里是一个的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()); 
+0

如果我给出了歌曲的路径,即R.drawable.inno,它在本声明中给我错误mp.setDataSource();我想知道你是谁?它是网络链接? –

+0

它是问我改变类型inno到uri –

+0

它给我错误的上下文也 –

1

你最好不要再懒惰和自己寻找解决方案。 @ 1Up几乎回答了你的问题。对于你的第二个问题:This is Uri

+0

兄弟我在res文件夹2首歌曲和两个媒体播放器不同的歌曲中要使用一个媒体播放器,两个以前我写的代码媒体播放器= MediaPlayer的歌曲.create(getApplicationContext(),R.drawable.inno); mediaPlayer1 = MediaPlayer.create(getApplicationContext(),R.drawable.rocky);现在我想用唯一的一个媒体播放器如何使用 –

+0

回复我,我不懒你懒的回答我的问题OK –

+0

MediaPlayer.setDatasource(路径); – pash

相关问题