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;
}
}
3 回答
VideoView
没有OnSeekCompleteListener()
但您可以从VideoView
的onPrepared
方法访问MediaPlayer
然后设置OnSeekCompleteListener
,如下所示:对
VideoView.seekTo()
的调用是MediaPlayer.seekTo()
的包装 . 即使仍在执行实际搜索,此函数几乎立即返回 . 因此,您想等待寻求通过MediaPlayer.OnSeekCompleteListener完成 .但是,正如里诺所说,标准
VideoView
不支持OnSeekCompleteListener
.But you can copy and locally customize the VideoView class to add this support yourself.
首先,从VideoView.java的副本开始 . 或者您可以克隆整个frameworks/base repo,但警告它要下载超过1 gig的数据 .
将VideoView.java复制到Eclipse Android项目中,它将开始构建但失败 . 这是我为编译而做的事情:
更新package语句以匹配您的项目 .
注释掉对
MetaData
的引用 . 对此的修复是在我的待办事项列表上 . 这些需要替换为MediaMetadataRetriever的调用 .通过调用
getBaseContext()
替换mContext
现在您已准备好为
OnSeekCompleteListener
添加代码 . 实现类似于其他听众,即OnCompletionListener
.最后,更新您自己的代码:
更新对
android.widget.VideoView
的引用以使用您自定义的VideoView
.实现一个监听器并通过调用
setOnSeekCompleteListener()
来设置它 .您的代码现在会在搜索真正完成时收到通知,然后可以执行后续搜索 .
你必须等待寻求完成,遗憾的是
VideoView
没有OnSeekCompleteListener()
(为什么谷歌?-_-)