9

Uso un MediaPlayer para reproducir un MP3. Actualmente deshabilité los cambios de orientación de la pantalla usandoAndroid: mantener MediaPlayer ejecutándose durante la actualización de la orientación de la pantalla de actividad

android:screenOrientation="portrait" 
android:configChanges="keyboardHidden|orientation" 

en el manifiesto. Ahora quiero admitir el modo de paisaje, es decir, eliminar esas etiquetas, pero tengo el problema de que durante el ciclo de destrucción/creación, el jugador se detiene y luego se reinicia. Esto está bien y de hecho lo hago incluso manualmente en onPause() para detener al jugador cuando la actividad va en segundo plano.

Para mantenerlo funcionando durante los cambios de orientación, intenté hacerlo estático (y utilizando el contexto de la aplicación para crearlo una vez). Por supuesto, cuando elimino el player.stop() en onPause() ahora, hace lo que quiero - bueno, hasta la actividad va en segundo plano.

Así, dos preguntas:

  • ¿Cómo puedo determinar si la actividad se volverá a crear directamente después de la llamada a onStop()
  • O: ¿Cómo puedo mantener la MediaPlayer en funcionamiento durante ese ciclo, pero detenerlo cuando la aplicación va en segundo plano?

Respuesta

3

¿Ha considerado utilizar la devolución de llamada onConfigurationChanged() para manejar parte de esta lógica?

+0

No se consiga llamar debido a la androide eliminado ': configChanges' en el manifiesto. – sunside

+0

Si desea diferenciar entre cuando simplemente cambia configuraciones y cuando realmente se detiene, no conozco otra forma de hacerlo que no sea el uso de ConfiguraciónCambiado(). Supongo que significa que tendrás que mantener la orientación 'android: configChanges =" "' en tu manifiesto: \ –

+0

Eso es lo que temí ... – sunside

1

Intenta ejecutar MediaPlayer en diferentes subprocesos.

Se pueden añadir a este hilo una API más complejo al que se puede llamar desde onCreate/onStop/on*

1

Si está utilizando fragmentos (y debe: P), a continuación, llamar a setRetainInstance(true) dentro de sus fragmentos onCreate () llamada hará que este problema desaparezca por completo.

0

consulte el siguiente respuesta: https://stackoverflow.com/a/31466602/994021

Es un POC que he creado para este fin. Cansado de resolver este problema una y otra vez para diferentes proyectos. Espero que ayude.

Realmente recomiendo cambiar a un tercer jugador fiesta como ExoPlayer desde Google chicos: https://github.com/google/ExoPlayer

+0

estoy usando ExoPlayer, pero ¿cómo voy a manejar esto? – Erum

+1

@Erum tendrá que usar la bandera android:configChanges="screenSize|orientation" en su actividad. –

+0

@Gasper de Elias, ya hice esto pero ¿hay algún otro problema que mi diseño no ajuste programáticamente una vez que cambio de orientación? – Erum

Cuestiones relacionadas