在Android中获取VideoView的MediaPlayer

21

是否可能在videoView的构造函数中直接获取其使用的mediaPlayer实例的引用?如果可能,该怎么做?

由于videoView没有像mediaPlayer那样多的监听器,因此我希望能够访问mediaPlayer以获得额外的控制和更好的事件处理。


你可以通过反射来实现。 - yorkw
反射过于混乱且危险。是否可能扩展VideoView并在其中获取MediaPlayer? - android developer
1个回答

16

你可以通过VideoView来监听。

VideoView mVideoView=new VideoView();
mVideoView.setOnPreparedListener( new MediaPlayer.OnPreparedListener() {
  @Override
  public void onPrepared(MediaPlayer pMp) {
   //use a global variable to get the object
  }
});

如果您只对媒体播放器事件感兴趣,您可以使用其中任何一个,这些事件已在VideoView上实现,基本上这些是MediaPlayer事件。

void    setOnCompletionListener(MediaPlayer.OnCompletionListener l)
void    setOnErrorListener(MediaPlayer.OnErrorListener l)
void    setOnInfoListener(MediaPlayer.OnInfoListener l)
void    setOnPreparedListener(MediaPlayer.OnPreparedListener l)

所有这些函数也将提供一个媒体播放器实例。


尽管我很久以前就问过这个问题,但我还记得我想要的:大量控制并被通知此视图中的所有事件:播放状态事件(暂停、开始、停止、搜索)、错误事件、缓冲状态等。MediaPlayer拥有所有这些功能(虽然不确定它们的工作效果如何),但VideoView只有一部分。 - android developer
VideoView上的事件(例如setOnInfoListener(MediaPlayer.OnInfoListener l))仅适用于API级别17及以上,那么如果我想支持更低的API级别呢? - Narendrasinh Dodiya
您可以找到MediaPlayer对象并设置其setOnInfoListener。可用> API 3. - Thomas Decaux
2
setOnPreparedListener() 不起作用,onPrepared() 从未被调用! - nburk
@nburk 确保你的代码中没有在其他地方调用 setOnPreparedListener()。如果有第二个调用,它会替换掉当前的调用。(希望这可以帮到你) - Francois Dermu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接