当前位置: 首页 > 知识库问答 >
问题:

试图通过setNextMediaPlayer设置第三名玩家时出现非法状态异常?

米俊晤
2023-03-14

有3个MediaPlayers,我想使用setNextMediaPlayer()设置这3个声音可以无缝播放。代码很简单(省略重复代码)

    mediaPlayer1 = new MediaPlayer();
    try {
        AssetFileDescriptor afd = getAssets().openFd("sound1.ogg");
        mediaPlayer1.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        mediaPlayer1.prepare();
        afd.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer1.start();

    mediaPlayer2 = new MediaPlayer();
    //Prepare 2nd player with sound2 without calling start()

    mediaPlayer3 = new MediaPlayer();
    //Prepare 3rd player with sound3 without calling start()

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        mediaPlayer1.setNextMediaPlayer(mediaPlayer2);
        mediaPlayer2.setNextMediaPlayer(mediaPlayer3); //ERROR RUNTIME!!!

这里我得到一个错误

E/MediaPlayer︰下一个播放器未准备好
D/AndroidRuntime︰关闭VM
W/dalvikvm︰三个=1:线程退出与未捕获的异常(组=0x4175fda0)
E/AndroidRuntime︰FATAL EXCEPTION: main Process:com.example.testgaplesssound.app, PID: 28960java.lang.RuntimeException:无法启动活动ComponentInfo{...}:java.lang.IllegalStateException at...

错误显示为MediaPlayer﹕ 下一个播放器没有准备好,所以我尝试设置为“准备好的侦听器”

  mediaPlayer2.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
  @Override
  public void onPrepared(MediaPlayer mp) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
              mediaPlayer2.setNextMediaPlayer(mediaPlayer3);                                    
        }
  }
  });

但是,onPre的永远不会启动!

那么,我怎样才能让第三名球员作为前两名完美地发挥作用呢?

共有1个答案

祁宝
2023-03-14

我刚刚测试了以下设置,没有错误,以为你的问题是初始化。但是后来我注意到你在初始化和链接另外两个之前开始了你的第一个播放器。重新排序你的代码可能会解决你的问题,但我也会发布这个,因为至少对我来说,这似乎是一个更简单的解决方案

将您的音频文件移动到/res/原料文件夹,并像这样初始化和启动您的播放器:

MediaPlayer mediaPlayer1, mediaPlayer2, mediaPlayer3;

mediaPlayer1 = MediaPlayer.create(this, R.raw.sound1);
mediaPlayer2 = MediaPlayer.create(this, R.raw.sound2);
mediaPlayer3 = MediaPlayer.create(this, R.raw.sound3);
mediaPlayer1.setNextMediaPlayer(mediaPlayer2);
mediaPlayer2.setNextMediaPlayer(mediaPlayer3);

mediaPlayer1.start();

注意:我在API 19下进行了测试,所以如果你支持的话,你仍然需要进行版本检查。

 类似资料:
  • 我在MediaCodec上得到了非法状态例外。configure()行,我正在尝试使用MediaCodec录制音频。这只发生在一些手机上,在标签上一切正常。这个特别的碰撞示例来自三星Galaxy S4。异常跟踪: 音频格式声明: 音频编码器初始化: 有人知道那可能是什么吗?奇怪的是,它只发生在某些设备上。欢迎提出任何建议!

  • 在react中,是否有人希望通过赋值而不是调用setState(…)来设置变量的状态的原因 例子: 在我看来,这似乎是一种反模式。但也许有一个很好的解释为什么有时候这是必要的?

  • 问题内容: 将DoOutput设置为true时,出现非法状态异常。 为相同显示的堆栈跟踪为: 我没有发现我发送请求时做错了什么。任何人都可以指出缺少的内容或我做错了什么 问题答案: 我遇到了同样的问题并解决了。就我而言,这是因为我在NetBeans的调试界面中忘记了监视。希望它可以帮助其他人犯同样的错误。 如果您有任何相对于请求的响应值,如:手表,,甚至只是,你会在调试模式下出现此错误。 所有先前

  • 这是我如何使用它 - 此外,我已经在超文本传输协议GET周围放置了一个最终块- 这是我的堆栈跟踪- 我正在使用Quartz来安排监控Httpendpoint的工作…这是我的连接池配置 马文依赖..神器版本 编辑-嗯,这个问题通过在最后一个块中不关闭CloseableHttp客户端而得到解决…有人能告诉我为什么它会这样吗?如果我关闭客户端,为什么连接池会关闭? 上面的closeablehttpcli

  • 我的主类似乎找不到我的 fmxl 文件,但我很确定路径是正确的。我不明白发生了什么。 这里是我的主要 我收到的错误是 Main.java:74 的错误是我的加载程序调用我不明白错误是由找不到我的fxml文件引起的?

  • 我正在尝试使用下面的快速加载API 连接…等是完美的。 我确切地知道它在哪里失败 例外情况是 < code >线程“main”Java . lang . illegalstateexception中出现异常:示例失败。 这是我试图上传的表格。它是格式,当我通过记事本打开它时,它看起来像这样 为什么我会得到这个异常?我该如何改进?据我理解问题是< code > pstmtfld . setascii