【问题标题】:Android MediaPlayer pauseAndroid 媒体播放器暂停
【发布时间】:2013-12-23 13:30:15
【问题描述】:

我现在遇到的问题是我的暂停并不总是有效。 我所拥有的是主要活动中的 MediaPlayer,它通过 ActionBarSherlock 和 onClick 侦听器进行操作。 MediaPlayer 使用 ArrayList 和 MP3 文件的 URL(其中一些长 1 秒)。

暂停代码:

       if (player.isPlaying()) {
            if (player != null) {
                player.pause();
                swapPlayIcon(1);
                isPaused = true;
                pauseMenuButt.setVisible(false);
                playMenuButt.setVisible(true);
            }
        }

swapPlayIcon(int) 只处理可见性和可绘制交换。

起始代码:

    Iterator<Uri> iterUri = tracks.iterator();
    while (iterUri.hasNext()) {
        Uri tmpUri = iterUri.next();
        try {
            player.reset();
            player.setDataSource(String.valueOf(tmpUri));
            player.prepare();
            player.start();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

编辑

经过更多测试,我发现问题出现在“中间”状态。

我的意思是,当我的 MP3 文件有 2 秒长并且我点击暂停时,它不会停止,因为它刚刚结束读取一个文件,现在转到下一个文件。

我已添加:

      } else {
          pauseLocked = true;
      }

暂停如果语句并且在测试时它根本没有落在其中。 所以我不确定我之前发现的“中间”问题。

【问题讨论】:

  • 不确定答案是什么,但重要的是要注意在第一个块中您可能会出现 NullPointerException ...您说 if(player.isPlaying()) 然后检查对于玩家!= null。如果 player 为 null,您将在调用 player.isPlaying() 时看到 NPE。您应该将空检查移出 isPlaying() if 语句,或者将其完全删除。
  • 是的,你是对的:>
  • 首先播放不会阻塞,因此您将尽可能快地循环播放媒体,因为播放器可以从您的 url 准备每个媒体流。第二,你在4.4 and are you trying to play HLSs吗?
  • 没有我在 4.3 和 4.2 上测试它。 MP3 文件在设备上。
  • @JakubW 你明白第一个问题吗?最后,你是正确的,你不能在媒体播放器准备时执行暂停操作,但你永远无法做到这一点,因为你使用的是 prepare() 的阻塞版本,所以这就是你的 else 分支的原因块没有被击中。

标签: java android android-mediaplayer


【解决方案1】:

您的 暂停 按钮不起作用,因为在您启动最后一个 URL 之前,它的消息无法到达 MediaPlayer。您完全阻止了 MediaPlayer 正在运行的线程(我假设它是 UI 线程,因为 MediaPlayer 在您的主要活动中)。如果您在与 UI 相同的线程上创建 MediaPlayer,则应使用异步版本的 prepare:prepareAsync。您需要在收到 onMediaPrepared 回调后做出响应,然后启动媒体。一旦发生这种情况,您必须什么都不做并等待媒体完成,然后您才应该加载另一个 url。

【讨论】:

  • 是的,媒体播放很难掌握。媒体播放器本身是一个复杂的状态机,您的支持活动需要正确管理所有这些状态。像循环音频流这样看似简单的事情会变得非常复杂。祝你好运!
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多