VideoView wird nicht angezeigt, auf einem Fragment
Ich habe ein problem bei der Ausführung einer video-Samsung S3(Android 4.1.1), das Problem scheint zu sein, weil die videoview ist auf ein fragment, weil wenn ich es auf-und Aktivität, es funktioniert.
Auch fand ich heraus, dass, wenn ich schalten Sie die GPU-hardware-Beschleunigung auf, die video-arbeiten.
Ich habe auch ein Spiel gemacht, indem auf einer SurfaceView und diese Ansicht funktioniert nicht so gut(nur mit der GPU auf)... der rest Der app-Inhalt wird angezeigt wie es soll (Tasten-und andere layouts).
Getestet habe ich die app auf dem Nexus S und dem emulator und es funktioniert einwandfrei, auch auf anderen Geräten..
Weiß jemand was das problem sein könnte?
Danke!
Und hier ist der code:
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;
}
}
Ich glaube nicht, dass es etwas im Zusammenhang mit Kontext(Anwendung oder Aktivität).. weil auf allen anderen Geräten, die Video-und die Spiele angezeigt werden..
Vielen Dank für die Hilfe!
- Poste bitte die Fragment-und layout-code, bezieht sich auf die VideoView. Ohne diese, schwer zu sagen, was falsch läuft.
- Den code Hinzugefügt auch, sorry.. das Ding ist, dass ich dieses Video Fragment-Klasse und ein Spiel, das ist wirklich eine SurfaceView, und ich zeichne auf, dass die Oberfläche, so dass ich nicht denke, das hängt mit meinem code.. wenn die Bildschirme laufen auf eine Tätigkeit dann funktionieren beide gut.. Danke für die Hilfe
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die hardware-Beschleunigung behebt Ihr Problem, dann würde ich aktivieren Sie für die Ansicht/Fenster auf diesem Gerät.
Im Allgemeinen habe ich gefunden, dass, wenn der code funktioniert auf einem Gerät aber nicht andere, es ist in der Regel verursacht durch eines der folgenden Probleme:
Soweit ich sagen kann, scheinen Sie mit dem UI-thread entsprechend, so würde ich mir Ihr Problem fällt in einer der ersten beiden Kategorien, und Sie brauchen nur, um um ihn zu arbeiten.
Ich habe ein ähnliches problem, und ich löste es ändern:
zu diesem (In ein fragmet):
Hoffe das hilft,...
BEARBEITEN
Blick auf diese Klasse
http://code.google.com/p/sinaweibo-honeycomb/source/browse/branches/sinaweibo-merged/src/com/lenovo/dll/SinaWeibo/VideoFragment.java?r=71
Bewegen
MediaController mediaController = new MediaController(getActivity())
ausonResume()
zuonCreateView
.