在Android中获取videoView的mediaPlayer

在Android中获取videoView的mediaPlayer,android,android-mediaplayer,android-videoview,Android,Android Mediaplayer,Android Videoview,是否有可能获得videoView正在使用的mediaPlayer实例的引用,最好是在其内部?如果是,怎么做 由于videoView没有mediaPlayer那么多的侦听器,我希望能够访问mediaPlayer以获得额外的控制和更好的事件处理。您可以从videoView进行侦听 VideoView mVideoView=new VideoView(); mVideoView.setOnPreparedListener( new MediaPlayer.OnPreparedListener() {

是否有可能获得videoView正在使用的mediaPlayer实例的引用,最好是在其内部?如果是,怎么做


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

您可以从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上实现的,基本上都是媒体播放器事件

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

所有这些函数也将给出一个媒体播放器实例

你可能可以通过反射来完成。反射太混乱,太危险了。是否可以扩展videoView并将mediaPlayer放在那里?尽管我很久以前就提出了这个问题,但我记得我想要的是:大量的控制和在此视图中所有事件的通知:播放状态事件(暂停、启动、停止、搜索)、错误事件、缓冲状态等。。。mediaPlayer拥有所有这些功能(虽然不确定它们的工作情况和方式),但videoView只有一些。videoView上的事件(例如SetOnInfo Listener(mediaPlayer.OnInfo Listener l))只能从API级别17获得,所以如果我想支持较低的API级别,该怎么办?您可以设置找到的mediaPlayer对象的SetOnInfo Listener。可用>API 3。
setOnPreparedListener()
不工作,
onPrepared()
从未调用过@nburk确保您没有在代码的更深处调用
setOnPreparedListener()
。如果你有第二个电话,那么第二个电话将取代这个电话。(希望这有帮助)