MediaPlayer问题 - 音频文件只播放一次

时间:2014-12-29 22:34:05

标签: android-mediaplayer

我试图在应用程序中实现基本的MediaPlayer,并根据剪辑是否正在播放,播放完成或手动中断播放(通过按相同按钮)使按钮更改状态。 / p>

使用下面的代码,我得到以下结果:

  1. 首次加载时,音频播放正常。

  2. 如果在播放期间再次按下ImageButton,播放将停止。当我再次按下它时,播放将从停止的时间戳恢复(我认为这是一种奇怪的行为,更典型的是" pause()"。

  3. 播放完成后,按钮更改工作正常,但我无法再次重播音频文件。当我按下开始时,它开始播放,然后立即转换到播放完成,而不实际播放音频。

  4. 我一直在搜索其他帖子/ google / android文档,但尚未找到解决方案。

    到目前为止我也尝试过:

    1. setLooping(真); - 除了从未到达的setOnCompletionListener之外,这根本没有任何效果。音频根本没有重播。

    2. 在onCompletion方法中,将seekTo()设置为几个不同的值(0,100),并使用包含" getCurrentPosition()"的日志消息。确认它实际上正在这样做,但即使这确认它从位置0或100开始,结果仍然相同(没有听到音频并立即完成)。

    3. 在onCompletion方法中,有几种调用" stop()"," prepareAsync()"甚至准备()。结果是相同的,但是在后续尝试(即尝试2,3等)回放时,当调用onCompletion方法时,我开始在调用不正确状态的stop()/ prepare()方法时遇到各种错误。 / p>

          final ImageButton pauseButton = (ImageButton) rootView.findViewById(R.id.playButton1);
          final MediaPlayer mediaPlayer = MediaPlayer.create(getActivity().getApplicationContext(), R.raw.ch01_01);
      
      
          mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
              @Override
              public void onCompletion(MediaPlayer mp) {
                  pauseButton.setImageResource(R.drawable.play_button);
              }
      
          });
      
          pauseButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
      
                  if(mediaPlayer.isPlaying()) {
                      mediaPlayer.stop();
                      mediaPlayer.prepareAsync();
                      pauseButton.setImageResource(R.drawable.play_button);
                  } else {
                      mediaPlayer.start();
                      pauseButton.setImageResource(R.drawable.stop_button);
                  }
              }
          });
      
    4. 任何帮助将不胜感激!

      P.S。我在onCreateView方法中使用了所有这些代码,用于我的应用程序中的Fragment。万一有人认为这可能是相关的。

1 个答案:

答案 0 :(得分:0)

显然这个问题只是我的三星Galaxy S2,因为相同的代码在运行Lollipop 5.0.1的Nexus 7(2013)上完美无缺。

Galaxy S2上的问题包括以下内容:

  1. 一旦MediaPlayer处于PlaybackCompleted状态,按下播放时它将不再播放相同的文件

  2. 尝试运行PlaybackCompleted状态的方法(根据Android文档应该是有效的)似乎做某事(即seekTo(0);实际上会寻求0,但音频文件永远不会播放时间。