2012-02-10 18 views
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(); 
} 

答えて

3

以下のコードは、メソッドonControllerHideを(実装してみません)と何が起こるかを参照してください。

+0

働いていた神聖ながらくた。のいずれ例でもこのメソッドについて言及していますが、動作します。ありがとう! –

関連する問題