Контроллер Android показывает дисплей в течение короткого времени - PullRequest
6 голосов
/ 30 июня 2011

Это действие ниже работает нормально, но MediaController отображается только, если я нажимаю на экран. И вторая проблема - отображение медиа-контроллера только на 3 секунды. что я должен сделать, чтобы устранить эту проблему?

public class PlayingActivity extends Activity
{

    private VideoView mVideoView;
    private EditText mPath;
    MediaController mediaController;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.playingactivity);
        mPath = (EditText) findViewById(R.id.path);
        mPath.setText(GlobalVariable.getstrEmail());
        mVideoView = (VideoView) findViewById(R.id.surface_view);
        Uri uri = Uri.parse("/sdcard/download/test.mp3");
        mediaController = new MediaController(this);
        mediaController.findFocus();
        mediaController.setEnabled(true);
        mediaController.show(0);
        mediaController.setAnchorView(mVideoView);
        mVideoView.setMediaController(mediaController);
        mVideoView.setVideoURI(uri);
        mVideoView.start();
    }
}

Ответы [ 4 ]

18 голосов
/ 01 августа 2012
mediaController.requestFocus();

заставит его отображаться, как только видео начнется (не требуя щелчка)

и

mVideoView.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mediaController.show(0);
            }
        });

сохранит его на экране.Надеюсь, это поможет

1 голос
/ 19 ноября 2013

Идеи Нео идеальны. Но я хотел бы добавить «mp.start ()» в метод onPrepared (MediaPlayer mp), без которого медиа-файл не начнет воспроизводиться.

0 голосов
/ 11 октября 2017

В MediaController есть две основные проблемы:

  1. автоматическое скрытие равно 3 с по умолчанию
  2. Нажатие на видео показывает / скрывает панель управления

Для первой части это легко исправить, изменив значение тайм-аута по умолчанию для начала на ноль (ноль означает неопределенный, он используется внутри при запуске видео) следующим образом:

mediaController = new MediaController(this){
            @Override
            public void show() {
                super.show(0);//Default no auto hide timeout
            }
    };

Вторая проблема немного сложна, потому что обработчик кликов объявлен как закрытый и окончательный, поэтому у нас нет никакого контроля над этим. Мое решение состоит в том, чтобы использовать другую функцию, чтобы установить видимость и отключить функцию скрытия следующим образом:

mediaController = new MediaController(this){

            @Override
            public void show() {
                super.show(0);//Default no auto hide timeout
            }
            @Override
            public void hide() {
                   //DOES NOTHING
            }

            void setVisible(boolean visible){//USE THIS FUNCTION INSTEAD
                if(visible)
                    super.show();
                else
                    super.hide();
            }
    };

Вы также можете добавить переменную для повторного включения стандартной функциональности, если для видимости установлено значение false, например:

mediaController = new MediaController(this){
                private boolean forceVisible=false;

                @Override
                public void show() {
                    super.show(0);//Default no auto hide timeout
                }
                @Override
                public void hide() {
                    if(!forceVisible)super.hide();
                }

                void setVisible(boolean visible){
                    forceVisible=visible;
                    if(visible)
                        super.show();
                    else
                        super.hide();
                }
        };
0 голосов
/ 20 мая 2015

Запрос фокуса или указание 0 в методе show у меня никогда не работал.

Проблема в том, что класс MediaController имеет время ожидания по умолчанию 3000 мс или 3 секунды.И его метод show () заменяет данный параметр на его параметр по умолчанию.Это глупая ошибка, возникающая из-за непроверенного кода в Google.

Нам нужно реализовать паршивый обходной путь замены значения по умолчанию на желаемое значение.

Попробуйте следующий код.Это должно работать.

mediaControls = new MediaController(getActivity()){
        @Override
        public void show (int timeout){
            if(timeout == 3000) timeout = 20000; //Set to desired number
            super.show(timeout);
        }
    };
mVideoView.setMediaController(mediaControls);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...