0

所以,我正在尝试从在线链接加载/流式传输 mp3 文件。我在实现中遇到的问题是同一个音频文件被播放了两次。

代码如下:

初始声明:

MediaPlayer mediaPlayer;

(在片段中)OnCreateView:

mediaPlayer = new MediaPlayer();
playPodCast(getPosition);

播放播客方法:

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(1st),几秒钟后将再次播放文件 A(2nd)。在这两个 A(1st) 中,可以通过播放/暂停实现来控制。

帮助。

4

2 回答 2

2

听起来好像有两个正在创建的 MediaPlayer 实例。如果没有看到更多代码,很难确定发生了什么。您是否在任何地方释放播放器?您是否尝试过将 logcat 输出放在 onCreateView 中?

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

于 2013-10-10T00:12:14.173 回答
1

试试这个代码,

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

  mediaplayer.setDataSource(url);
  mediaplayer.prepare();
  mediaplayer.start();
于 2013-10-09T08:56:34.193 回答