我在这里读过任何一个问题,但没有一个能解决我的问题。我正在尝试播放媒体文件,但它说:
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 方法)
提前致谢。
答案 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()并且所有方法都会逐行调用一行