9

Uso un MediaPlayer per riprodurre un MP3. Attualmente ho disabilitato le modifiche all'orientamento dello schermo utilizzandoAndroid: mantenere MediaPlayer in esecuzione durante l'aggiornamento dell'orientamento della schermata Attività

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

nel file manifest. Voglio ora supportare la modalità orizzontale, ovvero rimuovere quei tag, ma ho il problema che durante il ciclo di distruzione/creazione il giocatore viene fermato e quindi riavviato. Questo è ok e in realtà lo faccio anche manualmente in onPause() per fermare il giocatore quando l'attività va in background.

Per mantenerlo in esecuzione durante le modifiche di orientamento ora, ho provato a renderlo statico (e utilizzando il contesto dell'applicazione per crearlo una volta). Ovviamente, quando rimuovo lo player.stop() in onPause() ora, fa quello che voglio - beh, fino al l'attività va in background.

Così, due domande:

  • Come posso stabilire se l'attività verrà ricreata direttamente dopo la chiamata a onStop()
  • Ovvero: Come posso mantenere il MediaPlayer in esecuzione durante quel ciclo, ma fermarlo quando l'app passa in secondo piano?

risposta

3

Hai guardato usando il callback onConfigurationChanged() per gestire parte di questa logica?

+0

non venga chiamato a causa del 'Android rimosso: configChanges' nel manifesto. – sunside

+0

Se si desidera distinguere tra quando si cambiano le configurazioni e quando si interrompe effettivamente, non conosco altro modo di farlo se non utilizzando onConfigurationChanged(). Il che credo significhi che devi mantenere il 'android: configChanges =" orientation "' nel tuo manifest: \ –

+0

Questo è quello che temevo ... – sunside

1

Provare a eseguire MediaPlayer in thread diversi.

È possibile aggiungere a questo thread un'API più complessa a cui è possibile chiamare da onCreate/onStop/on*

1

Se si utilizza frammenti (e si dovrebbe: P), quindi chiamando setRetainInstance(true) dentro i frammenti onCreate () chiamata farà andare completamente questo problema andare via.

0

vedere il seguente risposta: https://stackoverflow.com/a/31466602/994021

Si tratta di un POC che ho creato per questo scopo. Stanco di risolvere questo problema più e più volte per diversi progetti. Spero possa essere d'aiuto.

Consiglio vivamente di passare a un giocatore di terze parti come ExoPlayer da google ragazzi: https://github.com/google/ExoPlayer

+0

utilizzo ExoPlayer ma come gestirlo? – Erum

+1

@Erum dovrai usare la bandiera android:configChanges="screenSize|orientation" nella tua attività. –

+0

@Gasper de Elias l'ho già fatto ma c'è un altro problema che il mio layout non regola in modo automatico una volta cambiato l'orientamento? – Erum