我有一个ListView,其中包含视频作为项目。在某些情况下,当我尝试设置表面时,我收到IllegalStateException。 源代码:
if(surfaceTexture != null){
mSurface = new Surface(surfaceTexture);
mMediaPlayer.setSurface(mSurface);
}
例外:
Fatal Exception: java.lang.IllegalStateException
android.media.MediaPlayer._setVideoSurface (MediaPlayer.java)
android.media.MediaPlayer.setSurface (MediaPlayer.java:829)
然而,Android MediaPlayer文档声明可以在任何状态下调用setSurface。
setSurface 任何 {} 可以在任何状态下调用此方法,并且调用它不会更改对象状态。
(http://developer.android.com/reference/android/media/MediaPlayer.html)
我无法重现此异常,我不知道MediaPlayer在异常期间处于哪种状态。
任何想法?
答案 0 :(得分:0)
如果播放器尚未初始化或已经在没有意识到的情况下已经发布,则会发生这种情况。 MediaPlayer的documentation似乎并未反映我所经历的行为。我已经遇到它在非常早期调用setSurface时抛出IllegalStateException,其中mediaPlayer对象不为null但可能在调用release之后没有初始化和单独调用。为了解决这个问题,我只是抓住了异常:
try {
mediaPlayer.setSurface(surface);
} catch (Exception e) {
Log.i("TAG", "MediaPlayer setSurface failed.");
}
由于调用setSurface
的回调在整个回放设置中被多次击中,因此在调用start
时,表面已经被设置,而不会抛出异常。