Звонок на VideoView.seekTo()
является оберткой вокруг MediaPlayer.seekTo()
. Эта функция возвращает почти сразу, хотя фактический поиск все еще выполняется. Поэтому вы хотите дождаться завершения операции через MediaPlayer.OnSeekCompleteListener
.
Однако, как упоминал Рено, стандарт VideoView
не поддерживает OnSeekCompleteListener
.
Но вы можете скопировать и локально настроить класс VideoView
, чтобы добавить эту поддержку самостоятельно.
Сначала начните с копии VideoView.java . Или вы можете клонировать все frameworks / base repo, но предупредив, что для загрузки требуется более 1 гигабайта данных.
Скопируйте VideoView.java в ваш проект Eclipse Android, и он начнет собираться, но не получится. Вот что я сделал для компиляции:
- Обновите оператор package , чтобы он соответствовал вашему проекту.
- Закомментируйте ссылки на
MetaData
. Исправление для этого находится в моем списке задач. Их необходимо заменить звонками на MediaMetadataRetriever
.
- Заменить
mContext
звонками на getBaseContext()
Теперь вы готовы добавить код для OnSeekCompleteListener
. Реализация аналогична другим слушателям, т.е. OnCompletionListener
.
public class VideoView extends SurfaceView
implements MediaPlayerControl {
// The client's 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()
.
Ваш код теперь получает уведомления, когда поиск действительно завершен, и может затем выполнять последующие операции поиска.