我有一个小的应用程序,从不同的URL从网络流,我想处理无效的破碎的URL,我已经尝试了各种捕捉提供,但即使当流一个破碎的文件,我可以看到我的日志在日志中,所有我看到的是
Error (1,-1004)
以下是我的代码
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(urlString);
Log.w("myApp", "0");
mediaPlayer.prepareAsync(); // might take long! (for buffering, etc)
playPauseButton.setVisibility(View.INVISIBLE);
progressBar1.setVisibility(View.VISIBLE);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
// TODO Auto-generated method stub
duration = mediaPlayer.getDuration();
textDuration.setText(getDurationString(duration/1000));
progress.setMax(duration);
playPauseButton.setChecked(true);
mediaPlayer.start();
playPauseButton.setVisibility(View.VISIBLE);
progressBar1.setVisibility(View.INVISIBLE);
}
});
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
Log.w("myApp", "1");
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
Log.w("myApp", "2");
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
Log.w("myApp", "3");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.w("myApp", "4");
e.printStackTrace();
}
谢谢你的帮助。)
MediaPlayer.OnErrorListener可能会有帮助,它不是一个异常,所以你无法捕获它。
onError(MediaPlayer mp, int what, int extra);
官方文档。MEDIA_ERROR_IO是额外的代码。
public static final int MEDIA_ERROR_IO
Added in API level 17
File or network related operation errors.
Constant Value: -1004 (0xfffffc14)
这可能会有帮助。如果你使用的是Android Studio,那么当你调试的时候,观察运行日志,它会显示被抛出的错误。
如:DMediaPlayerNative.Message:MEDIA_ERROR_IO 消息:MEDIA_ERROR(100) MEDIA_ERROR(100), ext1=Unknown MediaErrorType(-38), ext2=0x0。
这是我最接近看到流是否在线的方法.如果你知道更好的方法请回复。
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
Toast.makeText(MainActivity.this, "Media Error", Toast.LENGTH_SHORT).show();
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
Toast.makeText(MainActivity.this, "Radio Server Died", Toast.LENGTH_SHORT).show();
break;
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
Toast.makeText(MainActivity.this, "Stream is possibly offline", Toast.LENGTH_LONG).show();
button_stop.performClick();
break;
case MediaPlayer.MEDIA_ERROR_IO:
Toast.makeText(MainActivity.this, "IO Error", Toast.LENGTH_SHORT).show();
break;
}
return false;
}
});