【问题标题】:VideoView not looping video only on Galaxy s4VideoView 仅在 Galaxy s4 上不循环播放视频
【发布时间】:2014-02-23 14:26:50
【问题描述】:

在我的应用程序中,我使用 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 监听器之后)。

【问题讨论】:

标签: android media-player android-videoview galaxy


【解决方案1】:

这是 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();
}

【讨论】:

  • 这个解决方法有效,Set Looping 也不适用于 Oreo 设备,即 Nexus 6P、Galaxy Note 8。
【解决方案2】:

我也有同样的问题。适用于其他设备,但不适用于 Galaxy S4。

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

我目前的解决方法是在 onCompletion() 中调用 setVideoPath(),这似乎不适合我。

【讨论】:

    【解决方案3】:

    这是我从 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();
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多