所以,我正在尝试从在线链接加载/流式传输mp3文件。我实现的问题是同一个音频文件正在播放两次。
代码如下:
初步声明:
MediaPlayer mediaPlayer;
(片段中)OnCreateView:
mediaPlayer = new MediaPlayer();
playPodCast(getPosition);
PlayPodcast方法:
public void playPodCast(int index) {
try {
String url = toGet.get(index).get("URL").toString();
mediaPlayer.reset();
mediaPlayer.setDataSource(url);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(this);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onPrepared(MediaPlayer arg0) {
// TODO Auto-generated method stub
mediaPlayer.start();
}
我也实现了一个播放/暂停按钮:
btnPlay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (mediaPlayer.isPlaying()) {
if (mediaPlayer != null) {
mediaPlayer.pause();
// Changing button image to play button
btnPlay.setImageResource(R.drawable.play);
}
} else {
// Resume song
if (mediaPlayer != null) {
mediaPlayer.start();
// Changing button image to pause button
btnPlay.setImageResource(R.drawable.pause);
}
}
}
});
关于实现的奇怪之处在于,在音频文件的双重播放模式中,通过此播放/暂停实现只能访问其中一个。
例如,如果首先播放音频文件A(第一个),几秒钟后将再次播放文件A(第二个)。在这两个中,A(1st)可通过播放/暂停实现来控制。
帮助。
答案 0 :(得分:2)
听起来像是有两个MediaPlayer实例被创建。没有看到更多的代码,很难说肯定会发生什么。你在任何地方发布播放器吗?您是否尝试过将logcat输出放入onCreateView?
防止此问题最明智的方法是在本地服务中托管MediaPlayer。由于碎片有些不稳定,因此将MediaPlayer的生命周期与一个捆绑在一起可能不是最好的主意。
答案 1 :(得分:1)
试试这段代码,
if(player.isPlaying())
{
mediaplayer.stop();
}
mediaplayer.reset();
mediaplayer.setDataSource(url);
mediaplayer.prepare();
mediaplayer.start();