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

VideoView не воспроизводится Видео из желаемой позиции

Я использую VideoView и строку поиска, но когда я ищуTo (..) в желаемой позиции через seekBar, он воспроизводит видео с начала.

я пробовал этот код:

 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {

           mVideoView.seekTo(progress);
}
4b9b3361

Ответ 1

VideoView не имеет OnSeekCompleteListener(), но вы можете получить доступ к MediaPlayer из метода onPrepared VideoView, а затем установить OnSeekCompleteListener, например:

mVideoView.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {

        mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
            @Override
            public void onSeekComplete(MediaPlayer mp) {
                //TODO: Your code here
            }
        });

    }
});

Ответ 2

Вызов VideoView.seekTo() - обертка вокруг MediaPlayer.seekTo(). Эта функция возвращается почти сразу, даже если фактический поиск все еще выполняется. Поэтому вы хотите дождаться, когда захотите завершить через MediaPlayer.OnSeekCompleteListener.

Однако, как отметил Рено, стандарт VideoView не поддерживает OnSeekCompleteListener.

Но вы можете скопировать и локально настроить класс VideoView, чтобы добавить эту поддержку самостоятельно.

Сначала начните с копии VideoView.java. Или вы можете клонировать весь frameworks/base repo, но предупреждение о том, что для загрузки загружено более 1 гигабайта.

Скопируйте VideoView.java в свой проект Android Eclipse и он начнет строить, но не сработает. Вот что я сделал, чтобы скомпилировать его:

  • Обновите оператор пакета в соответствии с вашим проектом.
  • Прокомментируйте ссылки на MetaData. Исправить это в моем списке задач. Они должны быть заменены вызовами MediaMetadataRetriever.
  • Замените mContext на вызовы getBaseContext()

Теперь вы готовы добавить код для OnSeekCompleteListener. Реализация аналогична реализации других слушателей, т.е. OnCompletionListener.

public class VideoView extends SurfaceView
        implements MediaPlayerControl {

    // The client listener which is the notification callback.
    private OnSeekCompleteListener mOnSeekCompleteListener;

    // Set up MediaPlayer to forward notifications to client.
    private MediaPlayer.OnSeekCompleteListener mSeekCompleteListener =
        new MediaPlayer.OnSeekCompleteListener() {
        public void onSeekComplete(MediaPlayer mp) {
            if (mOnCompletionListener != null) {
                mOnCompletionListener.onCompletion(mMediaPlayer);
            }
        }
    };

    // API for client to set their listener.
    public void setOnSeekCompleteListener(OnSeekCompleteListener l)
    {
        mOnSeekCompleteListener = l;
    }
}

Наконец, обновите свой собственный код:

  • Обновите ссылки на android.widget.VideoView, чтобы использовать настроенный VideoView.
  • Реализовать прослушиватель и установить его путем вызова setOnSeekCompleteListener().

Теперь ваш код получает уведомления, когда поиск действительно завершен, и затем он может выполнять последующие запросы.

Ответ 3

Вам нужно подождать завершения поиска, к сожалению VideoView не имеет OnSeekCompleteListener() (почему Google? -_-)