今天,在Android中调用MediaPlayer,发现MediaPlayer出错了;比较奇怪的是,在步骤中并无普通的出错步骤;出错的日志如下。
E/InputEventReceiver: Exception dispatching input event. E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback E/MessageQueue-JNI: java.lang.IllegalStateException at android.media.MediaPlayer._stop(Native Method) at android.media.MediaPlayer.stop(MediaPlayer.java:1580)
碰到这个问题,想到的首要办法是,网上查资料。
发现StackOverflow上1个回答:
https://stackoverflow.com/questions/52814672/exception-in-messagequeue-callback-handlereceivecallback-for-audio-recorder
大致的意思是:MediaPlayer和MediaRecorder 有明确的状态,不能在不明确状态下调用。
随即发现另一篇博客:https://blog.csdn.net/dodod2012/article/details/80481986?
这篇博客的博主和我犯了同样错误,即调用stop后出错了;然而,MediaPlayer和MediaRecorder要求必须运行状态的播放器和录音器才能关闭,且建议开始后需要一定时间才能关闭。
于是,重新写播放器关闭代码,如下:
if(mMediaPlayer != null) {
mMediaPlayer.setOnCompletionListener(null);
mMediaPlayer.setOnErrorListener(null);
try {
if (mMediaPlayer.isPlaying()) {
sleep(1); //让播放器开始和停止有一定时间间隔
mMediaPlayer.stop();
}
} catch (Exception e){
e.printStackTrace();
}
mMediaPlayer.reset();
mMediaPlayer.release();
}
经测试,功能正常。
|