VideoView не воспроизводится Видео из желаемой позиции
Я использую VideoView и строку поиска, но когда я ищуTo (..) в желаемой позиции через seekBar, он воспроизводит видео с начала.
я пробовал этот код:
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
mVideoView.seekTo(progress);
}
Ответы
Ответ 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? -_-)