1

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

E/MediaPlayer(554):在状态 8 中调用 prepareAsync W/System.err(554):java.lang.IllegalStateException W/System.err(554):在 android.media.MediaPlayer.prepare(Native Method)

我找不到问题出在哪里。在模拟器上工作(抛出异常),在平板电脑上强制关闭。我看过一篇文章说我不应该使用准备方法,但如果我不这样做,什么都不会改变。

这是代码和错误:

 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 Method)

提前致谢。

4

2 回答 2

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 文档对此有更多说明。

检查您的媒体文件以确保它可以播放。

于 2012-05-30T10:52:30.783 回答
0

我面临着同样的问题。当我一一编写这四种方法而不是在这四行之间放置一些逻辑(代码)时,它就解决了。

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

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

于 2017-10-06T09:55:09.037 回答