【问题标题】:Get the mediaPlayer of the videoView in Android获取Android中videoView的mediaPlayer
【发布时间】:2012-06-26 12:06:05
【问题描述】:

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

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

【问题讨论】:

  • 您可以通过reflection 进行操作。
  • 反射太乱也太危险了。是否可以扩展 videoView 并在那里获取 mediaPlayer ?

标签: android android-mediaplayer android-videoview


【解决方案1】:

您可以从 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)

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

【讨论】:

  • 尽管我很久以前就问过这个问题,但我记得我想要什么:大量控制并被通知此视图中的所有事件:播放状态事件(暂停、开始、停止,seek) , error events , buffering status 等等 ... mediaPlayer 拥有所有这些(虽然不确定它们的工作情况和方式),但 videoView 只有一些。
  • VideoView 上的事件(例如 setOnInfoListener(MediaPlayer.OnInfoListener l))仅在 API 级别 17 可用,如果我想支持更低的 API 级别怎么办?
  • 您可以设置找到的MediaPlayer对象的OnInfoListener。可用 > API 3。
  • setOnPreparedListener() 不起作用,onPrepared() 永远不会被调用!
  • @nburk 确保您没有在代码中进一步调用setOnPreparedListener()。如果您确实有第二个电话,那么第二个电话将取代这个电话。 (希望这会有所帮助)
猜你喜欢
  • 2013-09-20
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多