处理 MediaPlayer 抛出无限错误的异常
Handle MediaPlayer exceptions from throwing infinite errors
我已经为 MediaPlayer 实现了一项服务,这样即使在最小化该应用后我也可以继续播放。问题是每当 MediaPlayer 无法播放歌曲(例如文件不存在或 MediaPlayer 源路径错误)时,它会抛出一个常见错误,
Error (-38,0) start called in state 0
这个使 运行 处于无限循环中,因为它在后台服务中,所以很难防止这种情况发生。在这种情况下,我想强制关闭 MediaPlayer 并等待 MediaPlayer 开始播放另一首歌曲。
我已经试过了,
if (mp! = null && mp.isPlaying()) {
mp.release();
}
但这并不能阻止 MediaPlayer 在获取异常后抛出错误。我想知道防止此类异常的最佳做法是什么。任何形式的帮助将不胜感激。
您可以在 MediaPlayer 上使用 onErrorListener
处理错误,例如
mp.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// handle your error here like exit media player or show message
or move to next song
return true;
}
});
这里主要是return true
,如果你return false
那么error就不会被你处理了
我已经为 MediaPlayer 实现了一项服务,这样即使在最小化该应用后我也可以继续播放。问题是每当 MediaPlayer 无法播放歌曲(例如文件不存在或 MediaPlayer 源路径错误)时,它会抛出一个常见错误,
Error (-38,0) start called in state 0
这个使 运行 处于无限循环中,因为它在后台服务中,所以很难防止这种情况发生。在这种情况下,我想强制关闭 MediaPlayer 并等待 MediaPlayer 开始播放另一首歌曲。
我已经试过了,
if (mp! = null && mp.isPlaying()) {
mp.release();
}
但这并不能阻止 MediaPlayer 在获取异常后抛出错误。我想知道防止此类异常的最佳做法是什么。任何形式的帮助将不胜感激。
您可以在 MediaPlayer 上使用 onErrorListener
处理错误,例如
mp.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// handle your error here like exit media player or show message
or move to next song
return true;
}
});
这里主要是return true
,如果你return false
那么error就不会被你处理了