Android: продолжайте работу MediaPlayer во время обновления ориентации экрана Activity - PullRequest
9 голосов
/ 04 ноября 2011

Я использую MediaPlayer для воспроизведения MP3. В настоящее время я отключил изменения ориентации экрана с помощью

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

в манифесте. Я действительно хочу сейчас поддерживать ландшафтный режим - т.е. удалить эти теги - но у меня проблема в том, что во время цикла уничтожения / создания игрок останавливается, а затем перезапускается. Это нормально, и я на самом деле делаю это даже вручную в onPause(), чтобы остановить игрока, когда активность идет в фоновом режиме.

Чтобы сохранить его во время изменения ориентации, я попытался сделать его статическим (и с помощью контекста приложения создать его один раз). Конечно, когда я удаляю player.stop() в onPause() сейчас, он делает то, что я хочу - ну, до Активность уходит в фоновом режиме.

Итак, два вопроса:

  • Как определить, будет ли действие воссоздано сразу после вызова onStop()
  • Или: Как я могу сохранить MediaPlayer во время этого цикла, но остановить его, когда приложение работает в фоновом режиме?

Ответы [ 5 ]

3 голосов
/ 04 ноября 2011

Рассматривали ли вы использование обратного вызова onConfigurationChanged () для обработки этой логики?

1 голос
/ 14 августа 2013

Если вы используете фрагменты (и вам следует: P), то вызов setRetainInstance(true) внутри ваших фрагментов вызовом onCreate () сделает эту проблему полностью исчезнувшей.

1 голос
/ 30 марта 2013

Попробуйте запустить MediaPlayer в другом потоке.

Вы можете добавить в этот поток более сложный API, к которому вы можете обращаться из onCreate / onStop / on*

1 голос
/ 25 января 2013

Относительно вашего вопроса, как вы можете надежно определить, была ли ваша активность уничтожена из-за изменения конфигурации, см. Мой ответ здесь: Как сохранить / восстановить (обновить) ссылку на диалоговое окно во время поворота экрана? (Мне нужна ссылка в onCreate метод деятельности.)

При этом ответ на ваш второй вопрос должен быть простым.

0 голосов
/ 17 июля 2015

Пожалуйста, смотрите следующий ответ: https://stackoverflow.com/a/31466602/994021

Это POC, который я создал для этой цели. Надоело снова и снова решать эту проблему для разных проектов. Надеюсь, это поможет.

Я действительно рекомендую переключиться на сторонний плеер, такой как ExoPlayer, от google guys: https://github.com/google/ExoPlayer

...