Android MediaPlayer 执行中的 IllegalStateException
IllegalStateException in Android MediaPlayer execution
我正在尝试 运行 连续发出蜂鸣声,直到用户按下按钮。我将 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
没有看到堆栈跟踪,这只是一个假设。但是你是直接调用
mp.release();
就在您创建一个之后。第二个是您正在创建 mediaPlayer
与 new MediaPlayer()
AND 与 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
处于结束状态:
Once the MediaPlayer object is in the End state, it can no longer be
used and there is no way to bring it back to any other state.
您应该遵循 API,我知道要阅读的内容很多,但了解有关 MediaPlayer
的所有内容非常重要。
我正在尝试 运行 连续发出蜂鸣声,直到用户按下按钮。我将 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
没有看到堆栈跟踪,这只是一个假设。但是你是直接调用
mp.release();
就在您创建一个之后。第二个是您正在创建 mediaPlayer
与 new MediaPlayer()
AND 与 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
处于结束状态:
Once the MediaPlayer object is in the End state, it can no longer be used and there is no way to bring it back to any other state.
您应该遵循 API,我知道要阅读的内容很多,但了解有关 MediaPlayer
的所有内容非常重要。