我有一个媒体播放器应用程序,我在其中使用链接路径从我的服务器获取我的数据源。问题是我在测试的时候故意删除了我给 mp.setDataSource(musicUri);
的音频链接路径的数据源文件来检查但我似乎无法捕获错误并解决
我已经将 mp.prepare();
替换为 mp.prepareAsync();
并将简单的 mp.start()
替换为
mp.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();
}
});
在开始之前监听媒体播放器是否准备好。
这是堆栈跟踪:
07-23 13:55:52.492: E/MediaPlayer(6870): Attempt to call getDuration without a valid mediaplayer
07-23 13:55:52.492: E/MediaPlayer(6870): error (-38, 0)
07-23 13:55:52.492: E/MediaPlayer(6870): Error (-38,0)
07-23 13:55:52.492: E/MediaPlayer(6870): stop called in state 0
07-23 13:55:52.492: E/MediaPlayer(6870): error (-38, 0)
07-23 13:55:52.492: E/MediaPlayer(6870): error (1, -107)
似乎没有任何效果,我想捕获这个错误来修复它对媒体播放器造成的异常结果。任何帮助都可以。谢谢!
编辑:
好的,所以我添加了 onErrorListener 但仍然无法正常工作:
mp.reset();
mp.setDataSource(musicUri);
mp.prepareAsync();
// mp.prepare();
mp.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(final MediaPlayer mp, final int what,
final int extra) {
Log.e(Constant.TAG_MYREC, "Error occurred while playing audio.");
mp.stop();
return false;
}
});
mp.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();
}
});
最佳答案
mMediaPlayer.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(final MediaPlayer mp, final int what,
final int extra) {
Log.e("Error occurred while playing audio.");
mp.stop();
您可能在文件完全加载之前调用了 getDuration。看能不能解决this question适合你。
关于android - 如何捕获媒体播放器数据源无文件错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17802625/