1

У меня есть ListView с видео в качестве элементов. В некоторых случаях я получаю исключение IllegalStateException, пока я пытаюсь установить поверхность. Исходный код:Android MediaPlayer setsurface нелегальныйstateexception

 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

Это произойдет, если игрок еще не был инициализирован или уже выпущен без вашего понимания. documentation для MediaPlayer, похоже, не отражает поведение, которое я испытал. Я столкнулся с тем, что он бросает IllegalStateException на очень ранние вызовы setSurface, где объект mediaPlayer не является нулевым, но, скорее всего, не инициализирован, а по отдельности после вызова release. Чтобы справиться с этим, я просто поймать исключение:

try { 
    mediaPlayer.setSurface(surface); 
} catch (Exception e) { 
    Log.i("TAG", "MediaPlayer setSurface failed."); 
} 

Поскольку наш обратный вызов, который вызывает setSurface получает удар несколько раз в течение настройки воспроизведения, к тому времени start называется, поверхность была установлена ​​снова, не бросать исключение.

+0

Возможно, игрок освобожден из-за другой ошибки. Это проверит. – OliverDeveloper