Android MediaPlayer抛出非法状态异常

Android MediaPlayer抛出非法状态异常,android,Android,edit3: 啊哈!SP“给出样本14未就绪”时MP崩溃… 编辑2: 我的活动中也有一个声音池,可以播放短音效,显然,它会以某种方式扼杀MediaPlayer。 就像MediaPlayer加载一样,播放大约一秒钟,然后在加载SP时停止播放。 如果我在以后加载MediaPlayer,当SP已经加载时,MP将开始正常播放,但如果我在SP中播放一些声音效果,MP将消失 旧的: 我正在尝试播放一个音乐声音文件,大约2分钟长 try { MediaPlayer mp = Media

edit3: 啊哈!SP“给出样本14未就绪”时MP崩溃…

编辑2: 我的活动中也有一个声音池,可以播放短音效,显然,它会以某种方式扼杀MediaPlayer。 就像MediaPlayer加载一样,播放大约一秒钟,然后在加载SP时停止播放。 如果我在以后加载MediaPlayer,当SP已经加载时,MP将开始正常播放,但如果我在SP中播放一些声音效果,MP将消失

旧的: 我正在尝试播放一个音乐声音文件,大约2分钟长

    try {
        MediaPlayer mp = MediaPlayer.create(main.this, R.raw.naturesounds );
        mp.prepare();
        mp.start();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
然而,它抛出

06-29 16:50:52.359: E/MediaPlayer(3772): prepareAsync called in state 8
06-29 16:50:52.359: W/System.err(3772): java.lang.IllegalStateException
06-29 16:50:52.359: W/System.err(3772):     at android.media.MediaPlayer.prepare(Native Method)
06-29 16:50:52.359: W/System.err(3772):     at engineDemo.com.main.fillWorld(main.java:132)
06-29 16:50:52.359: W/System.err(3772):     at engineDemo.com.main.onCreate(main.java:83)
06-29 16:50:52.359: W/System.err(3772):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-29 16:50:52.359: W/System.err(3772):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-29 16:50:52.359: W/System.err(3772):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-29 16:50:52.359: W/System.err(3772):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-29 16:50:52.359: W/System.err(3772):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-29 16:50:52.359: W/System.err(3772):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-29 16:50:52.359: W/System.err(3772):     at android.os.Looper.loop(Looper.java:130)
06-29 16:50:52.359: W/System.err(3772):     at android.app.ActivityThread.main(ActivityThread.java:3683)
06-29 16:50:52.359: W/System.err(3772):     at java.lang.reflect.Method.invokeNative(Native Method)
06-29 16:50:52.359: W/System.err(3772):     at java.lang.reflect.Method.invoke(Method.java:507)
06-29 16:50:52.359: W/System.err(3772):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-29 16:50:52.363: W/System.err(3772):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-29 16:50:52.363: W/System.err(3772):     at dalvik.system.NativeStart.main(Native Method)
有什么想法可能是错误的或什么是最好的方式来播放背景音乐

谢谢

编辑:

像这样编辑

    final MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.naturesounds);
    mediaPlayer.setOnPreparedListener(new OnPreparedListener(){

        public void onPrepared(MediaPlayer arg0) {
            Log.e("ready!","ready!");
            mediaPlayer.start();

        }} );
它确实显示了日志,但仍然没有播放…

示例:


您的MediaPlayer已准备就绪(),创建后不需要调用它。

尝试过,但它只播放了大约一秒钟,然后就停止了:(使用onPreparedListener进行.start()调用。可能发生的情况是,在您调用starttries时,它还没有准备好,请参见上面的编辑,它确实会触发日志,但不会播放任何内容。编辑后,日志cat中是否有错误?或者只是“就绪!”日志?只是“就绪”它还播放大约1秒的文件。尝试使用不同的文件,mp3和wav,相同。
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer arg0) {
        mp.start();

    }
});
//Below this line is the example from docs.
/*----------------------------------------------------*/
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
//mediaPlayer.start(); // no need to call prepare(); create() does that for you