Android MediaPlayer执行中的IllegalStateException
我试图连续运行beeb声音,直到用户按下按钮。我添加了alarm.mp3文件到raw folder
。但是这个媒体文件没有执行。我得到IllegalStateException
。Android MediaPlayer执行中的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);
}
任何帮助将appriciated。如果您需要更多信息,请告诉我。
UPDATE:
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
没有看到堆栈跟踪,it's只是一个假设。但你直接打电话
mp.release();
刚刚创建一个。第二个是你正在创建mediaPlayer
与new MediaPlayer()
和与create()
。如果您使用create()
和mp.create()
方法,则不需要new MediaPlayer()
,您无需致电prepare()
。我会尝试这样的:
mp = MediaPlayer.create(this,R.raw.alarm);
mp.setVolume(1f, 1f);
mp.setLooping(true);
mp.start();
如果mediaPlayer完成,只需拨打release
。像在API描述,release()
之后,MediaPlayer
处于结束状态:
一旦MediaPlayer对象是在最终状态时,它不再能够 使用,并且没有办法把它回任何其他状态。
您应该遵循API,我知道它有很多需要阅读的内容,但了解关于MediaPlayer
的所有内容非常重要。
感谢您的支持。我改变了你的建议,但我仍然得到相同的例外。 –
然后请编辑发布的代码,并请发布您的堆栈跟踪并指出错误发生的地方。 – Opiatefuchs
我更新了这个问题。我很难得到整个堆栈跟踪,我正在处理一个大项目并且找不到相关部分。 –
一旦'release()'被调用'MediaPlayer'不能被使用。当您完全使用“MediaPlayer”并且不再需要其资源时调用该方法。 – Onik
记录并发布_full_ stacktrace,而不仅仅是那么短的一行。 – njzk2