MediaController始终显示在Android上

我在我的应用程序中使用mediacontroller,但它只显示3秒钟。 我search了很多,但在每个文件中,我只看到了显示function,设置超时,但它没有效果。 我怎样才能始终显示mediacontroller?

我已经testing了show(0) ,但是没有效果。

您可以扩展MediaController类并以编程方式将其实例设置为VideoView类:

 import android.content.Context; import android.util.AttributeSet; import android.widget.MediaController; public class MyMediaController extends MediaController { public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } public MyMediaController(Context context, boolean useFastForward) { super(context, useFastForward); } public MyMediaController(Context context) { super(context); } @Override public void show(int timeout) { super.show(0); } } 

用法如下:

 VideoView myVideoView = (VideoView) findViewById(R.id.my_video_view); MediaController mc = new MyMediaController(myVideoView.getContext()); mc.setMediaPlayer(myVideoView); myVideoView.setMediaController(mc); 

您可以创build内联的匿名类并重写某些方法。 你需要重写隐藏方法,并在那里不做任何事情。 您还需要重写dispatchKeyEvent方法来检查返回按键并调用super.hide()。 否则后面按控制器不会隐藏,活动不能closures。

  mediaController = new MediaController(this){ @Override public void hide() { // TODO Auto-generated method stub //do nothing } @Override public boolean dispatchKeyEvent(KeyEvent event) { if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { if (mediaPlayer != null) { mediaPlayer.reset(); mediaPlayer.release(); mediaPlayer = null; } super.hide(); Activity a = (Activity)getContext(); a.finish(); } return true; } }; 

用这种方法试试show方法:

 new media controller().show(50000); 

还请检查http://developer.android.com/reference/android/widget/MediaController.html#show() 。

SudeepSR:请注意,如果您调用show(0),它将显示媒体控制器,直到hide()被调用。

你也可以创build一个内联的匿名类,并覆盖那里的hide方法,而不必为它创build一个全新的类:

 mediaController = new MediaController(this) { @Override public void hide() { //Do not hide. } }; 

你需要做的是,覆盖自定义控制器中的隐藏方法,什么也不做。

 public class MyMediaController extends MediaController { .. @Override public void hide() { // Do Nothing to keep the show the controller all times } ... } 

PS:您仍然需要点击video才能显示媒体控制器。

尽我所能,下面的代码为我工作!

  mVideoView = (VideoView) findViewById(R.id.video); mMediaController = new MediaController(this) { //for not hiding @Override public void hide() {} //for 'back' key action @Override public boolean dispatchKeyEvent(KeyEvent event) { if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { Activity a = (Activity)getContext(); a.finish(); } return true; } }; mMediaController.setAnchorView(mVideoView); mMediaController.setMediaPlayer(mVideoView); mVideoView.setMediaController(mMediaController); mMediaController.requestFocus(); //only this showed the controller for me!! mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mVideoView.start(); mMediaController.show(900000000); } }); //finish after playing mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { finish(); } }); 

这可能是一个古老的线程,但仍然没有答案,试试这个:

 final MediaController mediaController = new MediaController(this); mediaController.setAlwaysDrawnWithCacheEnabled(true); mediaController.setAnchorView(vView); mediaController.requestFocus(); vView.setOnPreparedListener( new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaController.show( 0 ); } }); vView.setVideoPath(Preview_Path); vView.setMediaController(mediaController); vView.start(); 

在MediaController类“show”方法里面有一个注释

 **Use 0 to show * the controller until hide() is called** 

所以使用900000或更大的值不会帮助。 希望它可以帮助你。

干杯。

尝试这个:

 videoView.setOnCompletionListener(onVideoCompleted); videoView.setOnPreparedListener(onVideoPrepared); mc.setAnchorView(videoView); mc.setMediaPlayer(videoView); MediaController mc = new MediaController(this); videoView.setMediaController(mc); MediaPlayer.OnPreparedListener onVideoPrepared = new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mc.show(0); } }; MediaPlayer.OnCompletionListener onVideoCompleted = new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mc.hide(); } }; 

我想淡化控制器的video,并始终显示audio。 这工作

  mController = new MediaController(this) { @Override public void hide() { if (mType != TYPE_AUDIO) super.hide(); } @Override public boolean dispatchKeyEvent(KeyEvent event) { if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { mController.hide(); Activity a = (Activity)getContext(); a.finish(); return true; } return false; } }; 

在MediaPlayer.onPrepared我补充说:

 if (mType == TYPE_AUDIO) mController.show(0); 

这会导致控制器在audio播放开始时显示,而不是video播放。

其他电话控制button继续正常工作。

简单! 在事件隐藏中设置可见性“GONE”,并在显示中设置可见性“VISIBLE”!

  MediaController mc= new MediaController(zoom.this){ @Override public void setMediaPlayer(MediaPlayerControl player) { super.setMediaPlayer(player); this.show(4000); } @Override public void show(int timeout) { super.show(timeout); this.setVisibility(View.VISIBLE); } //instead of press twice with press once "back" button to back @Override public boolean dispatchKeyEvent(KeyEvent event) { if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { Activity a = (Activity)getContext(); a.finish(); } return true; } @Override public void hide() { // TODO Auto-generated method stub super.hide(); this.setVisibility(View.GONE); //super.show(3000); } };