Подтвердить что ты не робот

Кнопка Android назад и MediaController

Я знаю, как взять под контроль кнопку "Назад" . У меня есть VideoView, встроенный в FrameLayout. Мой вопрос в том, когда видео всплывает, элементы управления видео присутствуют на несколько секунд. Нажатие кнопки "Назад" во время видимости скрывает элементы управления видео. Есть ли способ игнорировать эту функцию и выполнить следующее обратное действие, как если бы элементы управления видео не были видны?

Я прошу, если я действительно хочу вернуться, я должен дважды нажать кнопку "Назад" ; один раз, чтобы скрыть элементы управления, а затем, чтобы вернуться назад

4b9b3361

Ответ 1

На основе исходного кода это должно работать:

  • Расширить MediaController (для целей этого ответа назовите его RonnieMediaController)
  • Переопределить dispatchKeyEvent() в RonnieMediaController
  • Перед привязкой к суперклассу проверьте KeyEvent.KEYCODE_BACK, и если это произойдет, сообщите своей активности finish()
  • Используйте RonnieMediaController вместо MediaController с помощью VideoView

Лично я просто оставлю это в покое, так как с этим изменением ваш пользователь не может заставить RonnieMediaController исчезнуть по требованию.

Ответ 2

Вы можете просто написать:

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

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

Не нужно создавать новый класс.

Ответ 3

Вы также можете обработать событие Event:

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

Затем обработайте его в своей деятельности:

@Override
public void onBackPressed() {
    // clean up or send result here
    finish();
}