【问题标题】:Android MediaPlayer IllegalStateExceptionAndroid MediaPlayer IllegalStateException
【发布时间】:2013-08-01 04:19:13
【问题描述】:

我正在尝试在 Android 编程中使用 MediaPlayer 在 Eclipse 中播放音频文件。 我需要运行保存在计算机硬盘上的音频文件(.wav 或 .mp3)。我已经尝试了很多东西。我还尝试将文件复制到项目的 res 文件夹中,但没有任何效果。下面是我的代码。 如您所见,我尝试了很多方法并发表了一些评论。我第一次得到 IOException 之前。但是在使用 MediaPlayer.create() 之后,我得到了 IllegalStateException。 任何帮助将不胜感激。

public void playSound(MainActivity mainActivity){
    System.out.println("in playsound");
    MediaPlayer mp = null;
    FileInputStream fis = null;

     try {
         //fis = new FileInputStream("C:\\Users\\Anupam-PC\\Downloads\\trailsoundfilerecordings\\jagmeet.wav");

         //mp.setDataSource(fis.getFD());
         System.out.println("inside try");
         //mp.setDataSource("/res/raw/hai.wav");
         //mp.setDataSource("C:\\Users\\Anupam-PC\\Downloads\\trailsoundfilerecordings\\jagmeet.wav");
         //mp.setDataSource("android.resource://com.example.texttospeech/agreji.mp3");
         //mp.setDataSource("agreji.mp3");

         mp = MediaPlayer.create(mainActivity, R.raw.hai);
         System.out.println("after DS");
         mp.prepare();
         System.out.println("after prepare");
            mp.start();

           // fis.close();
        } catch (Exception e) {
            System.out.println(e);
        } finally{
            try{
                fis.close();
            } catch (Exception e){

            }
        }

【问题讨论】:

  • 附带说明,请考虑使用Log 类而不是System.out.println(...)

标签: android illegalstateexception


【解决方案1】:

你不需要实现mp.prepare();,你有create(/**/)

这是我的例子,就像一个魅力:

class Vulcan implements MediaPlayer.OnPreparedListener{

MediaPlayer mediaPlayer = null;
...

boolean isPrepearedToPlayAudio = false; 

mediaPlayer=MediaPlayer.create(context,R.raw.mini_vulcan_gun_1);

mediaPlayer.setOnPreparedListener(this);


public void stop(){

    mediaPlayer.pause();
}


public void start(){

    if(isPrepearedToPlayAudio){
               mediaPlayer.start();
       mediaPlayer.setLooping( true );
            } 
}


@Override
public void onPrepared(MediaPlayer mp) {
    isPrepearedToPlayAudio = true;
}

【讨论】:

  • 删除准备工作正常。但是非常感谢您的建议和分享代码示例。
  • @user2552857 如果您觉得它对您有帮助,您可以投票。 tnx
  • 无法做到 :( 它需要至少 15 个声望,而我刚加入这个论坛,声望为 0。
  • @user2552857 你可以设置“V”
【解决方案2】:

您对MediaPlayer.create(...) 的调用已经调用prepare(),并且多次调用prepare() 将导致ISE。您需要做的就是删除:

mp.prepare();

Javadoc:

为给定资源 ID 创建 MediaPlayer 的便捷方法。成功时,prepare() 将已经被调用,并且不能再次调用。

当使用 MediaPlayer 完成后,您应该调用 release() 来释放资源。如果不释放,过多的 MediaPlayer 实例会导致异常。

【讨论】:

    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多