Bouton de retour Android et MediaController

Je sais comment prendre le contrôle du bouton Retour. J'ai un VideoView incorporé dans un FrameLayout. Ma question est quand la vidéo apparaît, les contrôles vidéo sont présents pendant quelques secondes. Appuyer sur le bouton de retour alors qu'ils sont visibles Cache Les commandes vidéo. Existe-t-il un moyen d'ignorer cette fonction et de faire l'action suivante comme si les contrôles vidéo n'étaient pas visibles?

La raison pour laquelle je demande est si je veux vraiment revenir en arrière, je dois appuyer deux fois sur le bouton Retour; Une fois pour cacher les contrôles et la seconde pour revenir en arrière

25
demandé sur Ronnie 2011-05-19 02:37:32

3 réponses

, Basé sur le code source, cela devrait fonctionner:

  1. étendre MediaController (aux fins de cette réponse, appelez-la RonnieMediaController)
  2. Remplacer dispatchKeyEvent() dans RonnieMediaController
  3. avant d'enchaîner à la superclasse, Vérifiez KeyEvent.KEYCODE_BACK, et si cela est rencontré, dites à votre activité finish()
  4. Utiliser RonnieMediaController au lieu de MediaController votre VideoView

Personnellement, je le laisserais tranquille, car avec ce changement, votre utilisateur ne peut pas faire disparaître un RonnieMediaController à la demande.

27
répondu CommonsWare 2011-05-18 23:29:21

, Vous pouvez simplement écrire:

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

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

Pas besoin de créer une nouvelle classe.

15
répondu Serge Him 2013-01-10 13:11:05

Vous pouvez également avoir l'activité gérer l'événement:

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

Ensuite, gérez-le dans votre activité:

@Override
public void onBackPressed() {
    // clean up or send result here
    finish();
}
5
répondu Greg T 2016-01-27 18:08:41