我在三星S3(Android 4.1.1)中运行视频时遇到问题,问题似乎是因为视频片段在片段上,因为如果我把它放在活动上,它就可以了。 我还发现如果我打开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;
}
}
我不认为它与上下文(应用程序或活动)有关...因为在所有其他设备上显示视频和游戏.. 谢谢你的帮助!
答案 0 :(得分:4)
我有类似的问题,我解决了这个问题:
MediaController mediaController = new MediaController(getActivity().getApplicationContext());
到此(在片段中):
MediaController mediaController = new MediaController(getActivity());
希望这有帮助,......
修改强>
看看这个课程
答案 1 :(得分:1)
如果硬件加速可以解决您的问题,那么我会在该设备上enable it for that view/window。
一般情况下,我发现当代码在一台设备上运行但不在另一台设备上运行时,通常会由以下问题之一引起:
据我所知,你好像正在使用UI线程,所以我想你的问题属于前两个类别之一,你只需要解决它。
答案 2 :(得分:0)
将MediaController mediaController = new MediaController(getActivity())
从onResume()
移至onCreateView
。