studio source setvideouri setoncompletionlistener example developer android mediacontroller

source - MediaController siempre se muestra en Android



videoview android source (10)

¡Fácil! Establezca la visibilidad "GONE" en el evento y oculte la visibilidad "VISIBLE" en show!

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); } };

Estoy usando mediacontroller en mi aplicación, pero se muestra solo durante 3 segundos. He buscado mucho, pero en cada documento veo solo la función de mostrar, establece el tiempo de espera, pero no tiene efecto. ¿Cómo puedo mostrar siempre mediacontroller?

He probado el show(0) , pero no tuvo efecto.


Después de intentar todo lo que pude, el siguiente código funcionó para mí.

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(); } });


Esto puede ser un hilo viejo, pero aún sin respuesta, intente esto:

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();

Hay un comentario dentro del método "show" de la clase MediaController.

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

así que usar 900000 o un valor mayor no ayudará. Espero que te ayude.

aclamaciones.


Lo que debe hacer es anular el método de ocultación en el controlador personalizado y no hacer nada.

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

PD: aún debe hacer clic en el video para mostrar el controlador de medios.



Prueba esto:

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(); } };


Puede crear una clase anónima en línea y anular ciertos métodos. Es necesario anular el método de ocultación y no hacer nada allí. También es necesario anular el método dispatchKeyEvent para verificar la pulsación de la tecla Atrás y llamar al super.hide (). De lo contrario, en la parte posterior, presione el controlador que no se ocultará y la actividad no podrá cerrarse.

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; } };


Puede extender la clase MediaController y establecer mediante programación una instancia de la misma en una clase 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); } }

Aquí está el uso:

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


Quería desvanecer el controlador para videos y mostrarlo siempre para audio. Esto funciono

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; } };

En MediaPlayer.onPrepared he añadido:

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

Esto hace que el controlador se muestre al inicio de la reproducción de audio, pero no la reproducción de video.

Los otros botones de control del teléfono continúan funcionando normalmente.


También puede crear una clase anónima en línea y anular el método de ocultar allí en lugar de tener que crear una clase completamente nueva para él:

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