在我的应用程序中,我使用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侦听器之后)。
答案 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();
}
});