web-dev-qa-db-fra.com

Événement pour l'état de lecture VideoView ou lecture / pause MediaController

Je n'arrive pas à trouver un événement qui écoute l'état de lecture. Je suis principalement intéressé par l'état play/pause. J'utilise MediaController qui a un bouton Play/Pause, Mais j'ai un bouton secondaire qui contrôle également Play/Pause. En utilisant mon bouton personnalisé, je peux play/pause, Mais si je play/pause En utilisant le bouton MediaControllerplay/pause, Je n'ai actuellement aucun moyen de changer l'image sur mon bouton personnalisé play/pause pour jouer ou mettre en pause.

Y a-t-il un événement que je ne connais pas pour que je puisse travailler pendant la lecture/pause?

C'est une question très similaire: Comment attraper un événement lorsque vous cliquez sur le bouton pause/lecture sur MediaController

29
Ronnie

Si vous utilisez le MediaController en combinaison avec un VideoView, il devrait être relativement facile d'étendre ce dernier et d'y ajouter votre propre écouteur.

Le VideoView personnalisé ressemblerait alors à quelque chose comme ceci dans sa forme la plus basique:

public class CustomVideoView extends VideoView {

    private PlayPauseListener mListener;

    public CustomVideoView(Context context) {
        super(context);
    }

    public CustomVideoView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void setPlayPauseListener(PlayPauseListener listener) {
        mListener = listener;
    }

    @Override
    public void pause() {
        super.pause();
        if (mListener != null) {
            mListener.onPause();
        }
    }

    @Override
    public void start() {
        super.start();
        if (mListener != null) {
            mListener.onPlay();
        }
    }

    public static interface PlayPauseListener {
        void onPlay();
        void onPause();
    }

}

Son utilisation est identique à l'utilisation d'un VideoView normal, à la seule différence que nous pouvons maintenant y brancher notre propre écouteur.

// Some other code above...
CustomVideoView cVideoView = (CustomVideoView) findViewById(R.id.custom_videoview);
cVideoView.setPlayPauseListener(new CustomVideoView.PlayPauseListener() {

    @Override
    public void onPlay() {
        System.out.println("Play!");
    }

    @Override
    public void onPause() {
        System.out.println("Pause!");
    }
});

cVideoView.setMediaController(new MediaController(this));
cVideoView.setVideoURI(...);
// or
cVideoView.setVideoPath(...);
// Some other code below...

Enfin, vous pouvez également le déclarer dans votre mise en page XML et le gonfler (comme indiqué ci-dessus) - assurez-vous simplement que votre utilisation <package_name>.CustomVideoView. Exemple:

<mh.so.CustomVideoView Android:layout_width="wrap_content"
    Android:layout_height="wrap_content" Android:id="@+id/custom_videoview" />
92
MH.

Vous devriez être en mesure de définir votre propre MediaController.MediaPlayerControl et remplacer la pause et démarrer

2
FunkTheMonk