Botón de retroceso de Android y MediaController


Sé cómo tomar el control del botón atrás. Tengo un VideoView incrustado en un FrameLayout. Mi pregunta es cuando aparece el video, los controles de video están presentes durante unos segundos. Pulsar el botón atrás mientras están visibles oculta los controles de vídeo. ¿Hay alguna manera de ignorar esa función y hacer la siguiente acción de regreso como si los controles de video no fueran visibles?

La razón por la que pregunto es si realmente quiero volver, debo presionar el botón atrás dos veces; una vez para ocultar los controles y la segunda para realmente volver

Author: Ronnie, 2011-05-19

3 answers

Basado en el código fuente, esto debería funcionar:

  1. Extender MediaController (a los efectos de esta respuesta, llámelo RonnieMediaController)
  2. Anular dispatchKeyEvent() en RonnieMediaController
  3. Antes de encadenarse a la superclase, verifique KeyEvent.KEYCODE_BACK, y si se encuentra, dígale a su actividad que finish()
  4. Use RonnieMediaController en lugar de MediaController con su VideoView

Personalmente, simplemente lo dejaría en paz, ya que con este cambio su usuario no puede hacer que un RonnieMediaController desaparezca bajo demanda.

 27
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-18 23:29:21

Simplemente puede escribir:

mVideoView.setMediaController(new MediaController(this){
        public boolean dispatchKeyEvent(KeyEvent event)
        {
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK)
                ((Activity) getContext()).finish();

            return super.dispatchKeyEvent(event);
        }
    });

No es necesario crear una nueva clase.

 15
Author: Serge Him,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-10 13:11:05

También puede hacer que la Actividad maneje el evento:

mVideoView.setMediaController(new MediaController(this){
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK ) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                return true;
            } else if (event.getAction() == KeyEvent.ACTION_UP) {
                ((Activity) getContext()).onBackPressed();
                return true;
            }
        }
        return super.dispatchKeyEvent(event);
    }       
});

Luego manejarlo en su Actividad:

@Override
public void onBackPressed() {
    // clean up or send result here
    finish();
}
 5
Author: Greg T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-27 18:08:41