Java Android-检测流结束,而不是MediaPlayer中的连接错误
在收听1小时mp3流时,如果用户失去连接(或从WIFI切换到3G,连接“断开”一秒钟),我们会注意到MediaPlayer会继续播放其缓冲的内容。一旦缓冲内容用完,如果没有完成到文件末尾,我会假设它会触发一个错误事件,但它会将状态更改为播放完成。我们如何确定播放结束是由于连接错误(连接丢失)还是实际播放完成?我唯一能想到的就是在MediaPlayer将状态更改为播放完成时检查CurrentPosition与totalDuration。有更好的方法吗?如果它没有触发事件,您可以尝试注册并检查缓冲百分比是否达到100%。如果连接丢失,播放完成时的百分比将小于100%。很难知道这一点。我认为您的currentPosition&totalDuration方法很好,但我建议您也听听设备的网络状态。如果客户机导致与服务器的连接中断,您可以通过这种方式知道这一点。可能会有所帮助您必须确保您已经实现了一个onError方法,并且在此onError方法中必须返回真值。如果此方法返回的值为假,但在这种情况下出现错误,media player将触发onCompletion方法。使用缓冲区百分比的问题(设备实现的差异除外)在于,这些是持续时间较长(1-3小时或更长)的MP3而且缓冲区百分比几乎总是小于100%。@StackOverflow您的意思是,即使缓冲完成,您在Java Android-检测流结束,而不是MediaPlayer中的连接错误,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,在收听1小时mp3流时,如果用户失去连接(或从WIFI切换到3G,连接“断开”一秒钟),我们会注意到MediaPlayer会继续播放其缓冲的内容。一旦缓冲内容用完,如果没有完成到文件末尾,我会假设它会触发一个错误事件,但它会将状态更改为播放完成。我们如何确定播放结束是由于连接错误(连接丢失)还是实际播放完成?我唯一能想到的就是在MediaPlayer将状态更改为播放完成时检查CurrentPosition与totalDuration。有更好的方法吗?如果它没有触发事件,您可以尝试注册并检查缓冲百
OnBufferingUpdateListener
回调中也不能得到100%?我的意思是,如果mp3的长度为5小时,那么当网络连接丢失时,它可能已经在mp3中缓冲了4小时。@StackOverflow完全正确。因此,在这种情况下,对OnBufferingUpdateListener
的最后一次调用将小于100%,这表示播放完成时网络丢失。只有在缓冲完成时,才应达到100%。我不理解您试图解释的这种方法的问题。我是说,在出现网络问题之前,缓冲不能达到100%是很自然的。