Error al eliminar el fragmento que contiene videoView en 4.0.4

Tengo un fragmento que contiene VideoView y algunas otras vistas.

public class PlayerPane extends Fragment { ... // static variables private ImageView imageView; private ImageView gifView; private VideoView videoView; private WebView webView; private PDFView pdfView; private MyScrollTextView scrollTextView; private MediaPlayer audioPlayer; ... @Override public void onDestroyView() { if (videoView != null && videoView.isPlaying()) { LOGGER.info("Stopping videoView"); videoView.stopPlayback(); videoView.suspend(); videoView = null; } super.onDestroyView(); } 

Cada vez que elimino este fragmento mientras se está reproduciendo el video, IllegalStateException se está lanzando sólo en Android 4.0.4 (No hay problema con versiones anteriores a 4.0.4).

La siguiente es la excepción:

 java.lang.IllegalStateException at android.media.MediaPlayer._reset(Native Method) at android.media.MediaPlayer.reset(MediaPlayer.java:1236) at android.widget.VideoView.release(VideoView.java:549) at android.widget.VideoView.access$2300(VideoView.java:49) at android.widget.VideoView$6.surfaceDestroyed(VideoView.java:537) at android.view.SurfaceView.updateWindow(SurfaceView.java:581) at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:290) at android.view.View.dispatchDetachedFromWindow(View.java:9823) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266) at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3588) at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3568) at android.view.ViewGroup.removeView(ViewGroup.java:3516) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:951) at android.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1123) at android.app.BackStackRecord.run(BackStackRecord.java:592) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426) at android.os.Handler.handleCallback(Handler.java:605) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4424) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 

Así es como elimino el fragmento:

 getFragmentManager.beginTransaction().remove(fragmentToBeRemoved).commit(); 

¿Qué está causando esta IllegalStateException y cómo resuelvo esto? Cualquier cosa apuntando hacia la solución sería de gran ayuda.

3 Solutions collect form web for “Error al eliminar el fragmento que contiene videoView en 4.0.4”

Le sugiero que adopte un enfoque diferente. Antes de quitar el fragmento. Llame a este código antes de intentar quitar el fragmento.

 videoView.stopPlayback(); videoView.suspend(); 

Como es evidente a partir de la traza de pila, cuando se elimina el fragmento, lo que hace Android es quitar el VideoView (es una vista después de todo) lo que resulta en Videoview Intentando liberar el Mediaplayer subyacente. Pero el Mediaplayer en sí podría no ser un estado para ser liberado que está causando este problema. Lo ideal sería que este pozo podría haber sido manejado dentro de VideocView, pero parece que no

Creo que usted llama reset () después de la liberación () y este throw ilegalstateexception.

Vea el código que aparece en esta URL. Esto es del reps real del github del androide. https://github.com/android/platform_frameworks_base/blob/866658261f4613e17ed6f39a74975ad0c9f40767/media/jni/android_media_MediaPlayer.cpp

La función de restablecimiento de java llama a la función _reset nativa que se da en el archivo CPP en esta URL, esto es muy difícil de depurar, ya que es una llamada JNI que no se puede depurar. Así que, en mi opinión, es muy difícil saber qué va mal a menos que realmente sepamos qué es exactamente lo que está haciendo

  • Video en línea no se reproduce
  • Android VideoView No se puede reproducir el error de vídeo especialmente .mp4
  • Reproductor multimedia con YouTube?
  • VideoView en un fondo de pantalla en vivo?
  • Android: carga el video desde la carpeta privada de la aplicación
  • Reproducción de vídeo desde el servidor http en android
  • Mover vídeo ... usar animación de traducción
  • Cómo activar FullScreen con VideoView Android
  • Streaming de vídeos de Youtube
  • ¿Hay una manera de hacer que VideoView siga jugando en segundo plano en la aplicación para Android?
  • Eventos VideoView onTouch: pausar / reanudar vídeo y mostrar / ocultar MediaController y ActionBar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.