0
MediaPlayer 및 MediaController로 비디오를 재생하려고합니다. 비디오가 시작되고 3 초 후 충돌이 발생합니다. 비디오가 시작된 후 3 초가 지나면 비디오 컨트롤이 숨겨져 있기 때문입니다. 예외는 "추상화 된 메소드는 View.onControllerHide()를 구현하지 않았습니다. 나는 모든 클래스를 구현했고 onControllerHide()라는 메소드에 대한 참조를 찾을 수 없습니다. 무엇이든지 도움이 될 것입니다. 아래 코드 (필자는 관련이없는 코드를 왼쪽보다 쉽게 읽을 수 있도록 없습니다). 감사합니다!Android : MediaPlayer가 3 초 후에 다운 됨
public class LessonView extends Activity implements OnTouchListener, OnPreparedListener, SurfaceHolder.Callback,
MediaController.MediaPlayerControl, OnVideoSizeChangedListener, OnCompletionListener, OnBufferingUpdateListener {
private static final String TAG = "LessonView";
private MediaPlayer mMediaPlayer;
private MediaController mMediaController;
private Handler handler;
private SurfaceView mPreview;
private SurfaceHolder holder;
private String uri;
private int mVideoWidth = 0;
private int mVideoHeight = 0;
private boolean mIsVideoReadyToBePlayed, mIsVideoSizeKnown;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// remove status bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.lessonview);
ImageView backTabImg = (ImageView) findViewById(R.id.backTabImageView);
backTabImg.setOnTouchListener(this);
mPreview.setOnTouchListener(this);
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
uri = Globals.currentLesson.getDownloadURL();
handler = new Handler();
changeBackground();
}
private void playVideo() {
Log.v(TAG, "playVideo");
// Create a new media player and set the listeners
doCleanUp();
try {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(uri);
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setScreenOnWhilePlaying(true);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaController = new MediaController(this);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public boolean onTouch(View v, MotionEvent event) {
Log.v(TAG, "onTouch");
int position = v.getId();
if(position == R.id.backTabImageView) {
finish();
return true;
}
if(position == R.id.lessonSurfaceView) {
Log.v(TAG, "touch event");
mMediaController.show();
return true;
}
return false;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.v(TAG, "onSurfaceCreated");
playVideo();
}
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
Log.v(TAG, "onVideoSizeChanged called");
if (width == 0 || height == 0) {
Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")");
return;
}
mIsVideoSizeKnown = true;
mVideoWidth = width;
mVideoHeight = height;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
@Override
public void onPrepared(MediaPlayer mp) {
Log.v(TAG, "onPrepared called");
mIsVideoReadyToBePlayed = true;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
mMediaController.setMediaPlayer(this);
mMediaController.setAnchorView(findViewById(R.id.lessonSurfaceView));
handler.post(new Runnable() {
public void run() {
mMediaController.setEnabled(true);
mMediaController.show();
}});
}
private void startVideoPlayback() {
Log.v(TAG, "startVideoPlayback");
holder.setFixedSize(mVideoWidth, mVideoHeight);
mMediaPlayer.start();
}
거룩한 쓰레기 일이.의 없음 예를 들어이 방법을 언급 할 수도 있지만 작동합니다. 감사합니다! –