Android:VideoView setOnErrorListener只调用了一次
下面是我处理视频播放器错误的代码片段。此错误回调侦听器仅第一次被触发。之后,它不会捕获错误Android:VideoView setOnErrorListener只调用了一次,android,android-videoview,Android,Android Videoview,下面是我处理视频播放器错误的代码片段。此错误回调侦听器仅第一次被触发。之后,它不会捕获错误 videoPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { Toast.makeText(getApplicationContext(),
videoPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Toast.makeText(getApplicationContext(),
getResources().getString(R.string.msgPleaseNoConnection),
Toast.LENGTH_SHORT).show();
vVideoBufferLoader.setVisibility(View.INVISIBLE);
return false;
}
});
注:
我尝试从回调返回true,这意味着我处理了错误。但是它也不能解决问题。MediaPlayer的OnErrorListener的目标是在发生错误时发出信号,此时MediaPlayer对象处于结束状态。 如果使用MediaPlayer构造函数“重置”代码中其他位置的对象,则实际上是创建一个新的MediaPlayer对象,并将其保存在旧的MediaPlayer对象上。如果是这种情况,那么您还需要重新分配OnErrorListener 下面是我如何在应用程序中使用OneRorListener的一个简短片段:
private MediaPlayer.OnErrorListener vidVwErrorListener = new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) { //if there was an error in trying to play the intro video
if (tryLrgClip) { // If the larger-resolution clip failed to play, try playing the backup (lower-resolution) clip.
tryLrgClip = false;
trySmClip = true;
vidVwSplashView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + SPLASH_VIDEOS));
vidVwSplashView.start();
} else { // If that didn't work either, give up on playing a video, and do something else
tryLrgClip = trySmClip = false;
vidVwSplashView.setVisibility(View.GONE);
//Something else
}
return true;
}
};
我希望这有帮助