Android – 如何判断MediaPlayer何时缓冲

我不得不在这里忽略一些明显的东西,但是我似乎无法find任何让我确定何时MediaPlayer正在缓冲audio的东西。 我正在stream式传输互联网audio,我想要显示一个缓冲指示器,但是我试过的东西都没有让我知道什么时候MediaPlayer会中断audio缓冲,所以我无法正确显示缓冲指示器。 任何线索?

Solutions Collecting From Web of "Android – 如何判断MediaPlayer何时缓冲"

@丹尼尔,根据你对@JRL的回答的评论,你可以通过旋转一个线程并等待超时来获得这个工作。

像DetectBufferTimeout.java (未经testing)会很好。

但是,我确实认为把这个单独的线程搞砸是有点诡异的。 也许OnBufferingUpdateListener可以保证多久调用onBufferingUpdate()不pipe缓冲进度是否发生了变化,所以我们可以检测到我们是否得到了相同的值。

如下(API等级≥9):

 mp.setOnInfoListener(new OnInfoListener() { @Override public boolean onInfo(MediaPlayer mp, int what, int extra) { switch (what) { case MediaPlayer.MEDIA_INFO_BUFFERING_START: loadingDialog.setVisibility(View.VISIBLE); break; case MediaPlayer.MEDIA_INFO_BUFFERING_END: loadingDialog.setVisibility(View.GONE); break; } return false; } }); 

注意:Android中有一个已知的错误。 在播放HLSstream时,它从来不会调用OnInfoListener或OnBuffering。 检查这个链接OnInfoListener错误

好的,现在我觉得有点平反。 我检查了潘多拉的应用程序,它不显示缓冲指标。 当音乐被中断缓冲,它就在那里,就好像什么都没有发生,用户界面看起来还在播放。 所以我得出的结论是,如果您使用MediaPlayer,则无法确定曲目是否暂时暂停以进行缓冲。

但是,我注意到有一些MediaPlayer常量可以使用:MEDIA_INFO_BUFFERING_START和MEDIA_INFO_BUFFERING_END。 但是他们只能在9级以上的API中使用,文档中没有提及任何有关它们的信息。 我假设他们可以与OnInfoListener一起使用。

我很失望,但至less我现在可以停止旋转我的轮子,继续前进。

注册一个OnBufferingUpdate侦听器。

您可以使用一个线程来检查MediaPlayer的当前位置。 如果位置不变,则可以断定媒体处于缓冲状态。 这里是我写的完整教程: http : //www.ottodroid.net/? p= 260