音频文件抛出IllegalStateException

时间:2012-05-30 10:41:31

标签: android

我在这里读过任何一个问题,但没有一个能解决我的问题。我正在尝试播放媒体文件,但它说:

  

E / MediaPlayer(554):在状态8 W / System.err(554)中调用的prepareAsync:   java.lang.IllegalStateException W / System.err(554):at   android.media.MediaPlayer.prepare(原生方法)

我无法找到问题所在。在模拟器上工作(抛出异常),强制在平板电脑上关闭。我看过一篇帖子说我不应该使用prepare方法,但如果我没有改变的话。

这是代码&错误:

 MediaPlayer player = MediaPlayer.create(MyAct.this, R.raw.zboo);
        player.setLooping(false); 

        try {
            player.prepare();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        player.start();
  

E / MediaPlayer(522):在状态8中调用的prepareAsync

     

W / System.err(554):java.lang.IllegalStateException

     

W / System.err(554):在android.media.MediaPlayer.prepare(Native   方法)

提前致谢。

2 个答案:

答案 0 :(得分:3)

首先你不需要调用prepare(),因为这是通过create来完成的。 来自Android文档;

MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you

其次,如果情况需要您准备,那么请使用prepareAsync(),否则UI可能会挂起。异步准备在后台线程上执行准备部分,并在完成后返回结果。 Android documentation has more on this.

检查媒体文件以确保其可播放。

答案 1 :(得分:0)

我遇到了同样的问题。当我逐一编写这四种方法而不是在这四行之间放入一些逻辑(代码)时就解决了。

mediaPlayer.reset();
mediaPlayer.setDataSource("songpath");
mediaPlayer.prepare();
mediaPlayer.start();
  

你想在调用mp.prepare()之前编写mp.reset()并且所有方法都会逐行调用一行