MediaController всегда отображается на Android
Я использую mediacontroller в своем приложении, но он отображается только в течение 3 секунд. Я много искал, но в каждом документе я вижу только функцию show, устанавливаю тайм-аут, но это не имеет никакого эффекта. Как я могу всегда показывать mediacontroller?
Я тестировал show(0)
, но не имел никакого эффекта.
Ответы
Ответ 1
Вы можете расширить класс 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);
Ответ 2
Вы можете создать анонимный класс inline и переопределить определенные методы. Вам нужно переопределить метод hide и ничего не делать. Вам также необходимо переопределить метод dispatchKeyEvent, чтобы проверить, что для возврата к предыдущей клавише нажмите и вызовите super.hide(). В противном случае при нажатии на кнопку, контроллер не будет скрываться, и действие не может быть закрыто.
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;
}
};
Ответ 3
Попробуйте метод show следующим образом:
new media controller().show(50000);
И также проверьте http://developer.android.com/reference/android/widget/MediaController.html#show().
SudeepSR: Пожалуйста, отметьте, что если вы вызвали show (0), он покажет Media Controller, пока не будет вызвано hide().
Ответ 4
Вы также можете создать анонимный класс inline и переопределить метод hide вместо него, чтобы создать для него целый новый класс:
mediaController = new MediaController(this) {
@Override
public void hide() {
//Do not hide.
}
};
Ответ 5
Вам нужно переопределить метод hide в пользовательском контроллере и ничего не делать.
public class MyMediaController extends MediaController {
..
@Override
public void hide() {
// Do nothing here in order to always show
}
...
}
PS: Вам все еще нужно нажать на видео, чтобы показать медиа-контроллер.
Ответ 6
Попробовав все, что мог, следующий код работал у меня!
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();
}
});
Ответ 7
Попробуйте следующее:
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();
}
};
Ответ 8
Это может быть старый поток, но все еще не отвеченный, попробуйте следующее:
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();
theres внутри метода Media ShowController класса
**Use 0 to show
* the controller until hide() is called**
поэтому использование значения 900000 или больше не поможет.
надеюсь, что это поможет вам.
приветствий.
Ответ 9
Я хотел потушить контроллер для видео и всегда показывать его для аудио. Это сработало
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);
Это приводит к тому, что контроллер показывает в начале воспроизведения звука, но не воспроизводит видео.
Другие кнопки управления телефоном продолжают работать как обычно.
Ответ 10
Легко! Установите видимость "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);
}
};