MediaPlayer случайно останавливается на Android 4.4 (19)

Мое приложение транслирует звук на всех устройствах, кроме Nexus 5. На Nexus 5 MediaPlayer случайно останавливает воспроизведение. Не уверен, что изменения в отношении Loudness (http://developer.android.com/about/versions/android-4.4.html#Multimedia) в 4.4 сломали что-то.

Кто-нибудь еще замечает эту проблему? Кажется, что происходит с некоторыми пользователями, но я не могу воспроизвести на своем Nexus 5.

ОБНОВЛЕНИЕ:. Таким образом, я смог воспроизвести проблему на своем Nexus 5. Кажется, что это происходит практически в конце клипа. Примерно через 1 - 5 секунд в клипе, метод OnCompletionListener.onCompletion() вызывается MediaPlayer. Это происходит только на Nexus 5, и это происходит случайно на некоторых клипах. Я могу воспроизвести его почти в 30% случаев. Обратите внимание, что, когда клип заканчивается раньше, если я попытаюсь вернуться и снова воспроизвести клип, он полностью завершит воспроизведение клипа во второй раз. Я знаю, что Android 4.4 только что выпущен, но, надеюсь, кто-то там может помочь! Спасибо.

ОБНОВЛЕНИЕ: Я подал ошибку на Android: https://code.google.com/p/android/issues/detail?id=62304

Ответ 1

Хорошо, я нашел решение. Я не уверен, что это проблема, с которой вы сейчас сталкиваетесь, но она исправляет мою. В основном, Android 4.4+ представляет множество новых функций управления питанием, и один из них включает в себя закрытие CPU, когда экран выключен. Цитата из Android docs:

Поскольку система Android пытается сэкономить аккумулятор, когда устройство спать, система пытается отключить любые функции телефона которые не нужны, включая процессор и оборудование Wi-Fi. Однако, если ваша служба воспроизводит или передает музыку, вы хотите чтобы система не мешала вашему воспроизведению.

Следовательно, без блокировки слежения за процессором MediaPlayer теряет способность правильно воспроизводить поток, заставляя его прекратить воспроизведение до завершения клипа. Решение для этого просто: добавьте PARTIAL_WAKE_LOCK в MediaPlayer. Как указано на Android:

mMediaPlayer = new MediaPlayer();
// ... other initialization here ...
mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);

Я предполагаю, что мы не смогли увидеть это в документах. Я не помню этого, поэтому, возможно, это было просто добавлено. Во всяком случае, надеюсь, это исправляет проблему для всех!

Ответ 2

Запустите почти ту же проблему в последнее время: MediaPlayer отлично работает на Android 4.3 и ниже, но не воспроизводит те же видео на Android 4.4.

Решено перейти на vitamio, и теперь мое приложение работает и с 4.4. vitamio API идентичен MediaPlayer, поэтому миграция была довольно простой.

Но это решение все еще имеет некоторые недостатки:

  • Вы должны купить лицензию, если вы не являетесь отдельным разработчиком.
  • Размер приложения будет увеличен ~ 11 мегабайт

Ответ 3

Эта проблема возможна, связанная с ошибкой: http://code.google.com/p/android/issues/detail?id=63032

Проблема, связанная с указанной ошибкой, зафиксирована в 4.4.1/4.4.2. Запись журнала изменений, которая, как предполагается, является проблемой, имеет следующую информацию: