VideoView不仅仅在Galaxy s4上循环播放视频

时间:2014-02-23 14:26:50

标签: android media-player android-videoview galaxy

在我的应用程序中,我使用VideoView来传输视频文件,然后使用MediaPlayer.setLooping(true)制作VideoView循环视频。

以下是一些代码 -

videoView.setVideoPath(url);
videoView.setOnPreparedListener(new OnPreparedListener() {

@Override
public void onPrepared(MediaPlayer mp) {
    if (shouldLoopVideo) {
        mp.setLooping(true);
    }

    videoView.start();
}
 });

这段代码适用于所有设备,但Galaxy s4 android 4.2.2我在很多设备和许多Android版本上测试过,但唯一失败的是galaxy s4。

设备将播放视频一次,然后停止(在调用onCompletion侦听器之后)。

3 个答案:

答案 0 :(得分:2)

这是Android 4.4.2的错误。 我的解决方法:

private String mVideoPath;
private VideoView mVideoView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mVideoPath = "android.resource://" + getActivity().getPackageName() + "/" + R.raw.backvideo;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);


    mVideoView = (VideoView) view.findViewById(R.id.videoBackground);
    mVideoView.setVideoURI(Uri.parse(mVideoPath));
    mVideoView.setKeepScreenOn(true);


    mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
        @Override
        public void onCompletion(MediaPlayer mp) {
            mVideoView.setVideoURI(Uri.parse(mVideoPath));
            mVideoView.start();
        }
    });

    mVideoView.start();
}


@Override
public void onPause() {
    super.onPause();
    mVideoView.pause();
}

@Override
public void onResume() {
    super.onResume();
    mVideoView.setVideoURI(Uri.parse(mVideoPath));
    mVideoView.start();
}

答案 1 :(得分:0)

我遇到了同样的问题。适用于其他设备,但不适用于Galaxy S4。

这个问题是否有一些已知的解决方案。

我目前的解决方法是在onCompletion()中调用setVideoPath(),这对我来说并不适合。

答案 2 :(得分:0)

这是我的代码,它从android J到android O设备

  VideoView vv = (VideoView)findViewById(R.id.vv);
        vv.setZOrderOnTop(true);

        try {
            MediaController mediacontroller = new MediaController(this);
            mediacontroller.setAnchorView(vv);

            Uri uri = Uri.parse(_video_link);
            vv.setMediaController(mediacontroller);
            vv.setVideoURI(uri);
            vv.seekTo(1);

        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }

        vv.requestFocus();
        vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            public void onPrepared(MediaPlayer mp) {

                mp.setLooping(true);
                vv.start();

            }
        });
        vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp)
            {
                vv.resume();
            }
        });