MediaPlayer播放两次相同的文件

时间:2013-10-09 08:54:26

标签: android android-fragments android-mediaplayer

所以,我正在尝试从在线链接加载/流式传输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)可通过播放/暂停实现来控制。

帮助。

2 个答案:

答案 0 :(得分:2)

听起来像是有两个MediaPlayer实例被创建。没有看到更多的代码,很难说肯定会发生什么。你在任何地方发布播放器吗?您是否尝试过将logcat输出放入onCreateView?

防止此问题最明智的方法是在本地服务中托管MediaPlayer。由于碎片有些不稳定,因此将MediaPlayer的生命周期与一个捆绑在一起可能不是最好的主意。

答案 1 :(得分:1)

试试这段代码,

if(player.isPlaying())
      {  
        mediaplayer.stop();
       } 
        mediaplayer.reset();

  mediaplayer.setDataSource(url);
  mediaplayer.prepare();
  mediaplayer.start();