VideoView不会显示在片段(VideoView is not displayed on a F

2019-08-03 00:34发布

我在三星S3(安卓4.1.1)上运行视频的问题,这个问题似乎是因为videoview是一个片段,因为如果我把它放在和活动,它的工作原理。 此外,我发现,如果我点亮在GPU硬件加速的视频作品。 我也曾经做了一个游戏通过在SurfaceView绘图和观点并不为正常工作(仅适用于GPU上的)......因为它应该(按钮和其他布局)显示应用内容的其余部分。

我测试在Nexus S和模拟器上的应用程序,它工作得很好,还对其他设备..

有谁知道是什么问题? 谢谢!

这里是代码:

public class VideoFragment extends Fragment implements MediaPlayer.OnCompletionListener,
        MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener {

    private Video mVideo;
    private VideoView mVideoView;
    // The video position
    private int mPosition;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View fragmentView = inflater.inflate(R.layout.screen_video, container, false);

        mVideoView = (VideoView) fragmentView.findViewById(R.id.VideoView);

        return fragmentView;
    }


    @Override
    public void onPause() {
        super.onPause();

        // Pause the video if it is playing
        if (mVideoView.isPlaying()) {
            mVideoView.pause();
        }

        // Save the current video position
        mPosition = mVideoView.getCurrentPosition();
    }

    @Override
    public void onResume() {
        super.onResume();

        mVideoView.setOnCompletionListener(this);
        mVideoView.setOnPreparedListener(this);
        mVideoView.setOnErrorListener(this);
        mVideoView.setKeepScreenOn(true);

        // Initialize the media controller
        MediaController mediaController = new MediaController(getActivity());
        mediaController.setMediaPlayer(mVideoView);
        // Set-up the video view
        mVideoView.setMediaController(mediaController);
        mVideoView.requestFocus();
        mVideoView.setVideoPath(mVideo.getUrl());

        if (mVideoView != null) {
            // Restore the video position
            mVideoView.seekTo(mPosition);
            mVideoView.requestFocus();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        // Clean-up
        if (mVideoView != null) {
            mVideoView.stopPlayback();
            mVideoView = null;
        }
    }

    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
        Log.e("VIDEO PLAY", "end video play");
    }

    @Override
    public void onPrepared(MediaPlayer mediaPlayer) {
        // Start the video view
        mediaPlayer.start();
        Log.e("VIDEO PLAY", "video ready for playback");
    }

    @Override
    public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
        Log.e("VIDEO PLAY", "error: " + i);
        return true;
    }

}

我不认为它的东西与情境(应用程序或活动)..因为视频和游戏显示其他所有设备上..感谢您的帮助!

Answer 1:

如果硬件加速解决您的问题,那么我会启用该视图/窗口,在该设备上。

一般来说,我发现,当代码工作在一个设备上,但不是另一个它通常是由下列问题之一引起的:

  1. 臭虫在制造商的API实现
  2. 制造商API的不同解释
  3. 出现这种情况更频繁地触发特定的设备上的并发问题(如竞争状态,不当同步)在自己的代码

至于我可以告诉你似乎可以适当使用UI线程,所以我会想象你的问题属于前两类的一个,您只需要解决它。



Answer 2:

我有一个类似的问题,我解决它改变:

 MediaController mediaController = new MediaController(getActivity().getApplicationContext());

本(在fragmet):

 MediaController mediaController = new MediaController(getActivity());

希望这可以帮助,...

编辑

看看这个类

http://code.google.com/p/sinaweibo-honeycomb/source/browse/branches/sinaweibo-merged/src/com/lenovo/dll/SinaWeibo/VideoFragment.java?r=71



Answer 3:

移动MediaController mediaController = new MediaController(getActivity())onResume()onCreateView



文章来源: VideoView is not displayed on a Fragment