Android MediaPlayer执行中的IllegalStateException

时间:2016-10-04 02:20:09

标签: android media-player android-mediaplayer illegalstateexception

我正在尝试连续播放beeb声音,直到用户按下按钮。我将alarm.mp3文件添加到raw folder。但是这个媒体文件没有执行。我得到了IllegalStateException

这是我的代码:

MediaPlayer mp = new MediaPlayer();
try{
            mp.release();
            mp = MediaPlayer.create(this,R.raw.alarm);

            mp.prepare();
            mp.setVolume(1f, 1f);
            mp.setLooping(true);
            mp.start(); 

        }catch(IllegalStateException e){
            System.out.println("Test Exception "+e);

        }catch (IOException e) {
            // TODO: handle exception
            System.out.println("Test Exception "+e);
        }

我将这个mp3文件添加到asset folder并尝试播放它,但我仍然得到相同的异常。

这是我使用的代码:

MediaPlayer mp = new MediaPlayer();
try{
                mp.release();
                AssetFileDescriptor afd=context.getAssets().openFd("alarm.mp3s");   
                mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
                mp.prepare();
                mp.setVolume(1f, 1f);
                mp.setLooping(true);
                mp.start(); 

            }catch(IllegalStateException e){
                System.out.println("Test Exception "+e);

            }catch (IOException e) {
                // TODO: handle exception
                System.out.println("Test Exception "+e);
            }

任何帮助都会得到满足。如果您需要更多信息,请告诉我。

更新

try{
                mp = MediaPlayer.create(context,R.raw.alarm);
                mp.setVolume(1f, 1f);
                mp.setLooping(true);
                mp.start(); 

            }catch(IllegalStateException e){
                System.out.println("Test Exception "+e);

            }

当用户点击按钮时:

mp.stop();
         if(!mp.isPlaying()){
              mp.release();
         }

这是一个例外:

10-04 12:50:06.105: I/System.out(14074): Test Exception java.lang.IllegalStateException

1 个答案:

答案 0 :(得分:1)

没有看到堆栈跟踪,这只是一个假设。但是你直接打电话

mp.release();

创建一个之后。第二个是您使用mediaPlayer创建new MediaPlayer() create()。如果您使用new MediaPlayer()create()方法,则不需要mp.create(),您无需致电prepare()。我会这样试试:

  mp = MediaPlayer.create(this,R.raw.alarm);            
  mp.setVolume(1f, 1f);
  mp.setLooping(true);
  mp.start(); 

如果mediaPlayer完成,只需致电release即可。与API中描述的release()之后的MediaPlayer一样,MediaPlayer处于最终状态:

  

一旦MediaPlayer对象处于End状态,它就不再是   使用过,没有办法把它带回任何其他州。

您应该遵循API,我知道这很难阅读,但了解$(".vv div:first-child").click(function(){ $("tr").append("<td></td><td></td><td></td><td></td><td></td><td></td><td></td>"); }); 的所有内容非常重要。