我有以下代码来播放小型音频文件
private void playVoice() {
if (mPlayVoice != null) {
if (mPlayVoice.isPlaying()) {
mPlayVoice.release();
mPlayVoice = null;
}
}
mPlayVoice =
MediaPlayer.create(BirdsActivity.this, mSoundIds[getCurrentIndex()]);
mPlayVoice.start();
}
在三星Galaxy标签中工作正常,但在小型设备中出现以下错误(我在Sony xperia mini pro中检查了我的项目)
08-17 12:45:45.232: ERROR/AndroidRuntime(6639): java.lang.IllegalStateException
08-17 12:45:45.232: ERROR/AndroidRuntime(6639): at android.media.MediaPlayer.isPlaying(Native Method)
08-17 12:45:45.232: ERROR/AndroidRuntime(6639): at com.android.mds.kidsapps.alphakids.BirdsActivity.playVoice(BirdsActivity.java:146)
答案 0 :(得分:12)
你这样做:
PlayVoice.release();
你不是说
mPlayVoice.release();
如果您有其他问题,这是最好的咨询文件:
修改的
好的,如果你在这里:isPlaying() Invalid States它显示你正在尝试在播放器处于错误状态时调用isPlaying()。所以你需要弄清楚为什么已经处于错误状态。
通常,一些回放控制操作可能由于各种原因而失败,例如不支持的音频/视频格式,交错的音频/视频,分辨率太高,流超时等。
看看添加错误监听器:setOnErrorListener()
答案 1 :(得分:10)
使用以下代码,因为我遇到了同样的例外。
try {
if(mPlayVoice!=null && mPlayVoice.isPlaying()) {
Log.d("TAG------->", "player is running");
mPlayVoice.stop();
Log.d("Tag------->", "player is stopped");
mPlayVoice.release();
Log.d("TAG------->", "player is released");
}
} catch(Exception e){
}
在这里写下你想做的事。实际上,像isPlaying()
或检查null的条件检查会生成IllegalStateException .....
答案 2 :(得分:2)
您可能必须清除与audioStream连接的audioGroup。我使用以下代码:
public static void audioPlayCaptureStop()
{
try
{
if(audioStream.isBusy())
{
audioGroup.clear();
audioStream.release();
System.out.println("audioStream released");
}
} catch (Exception e) {
System.out.println("audioStream release exception: "+e.toString());
}
}