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;
    }
};
我希望这有帮助