android.media.Ringtone.play() перестает работать после 28 прослушиваний

У меня есть приложение, которое открыто в течение нескольких часов и использует фоновый сервис с прикрепленным уведомлением переднего плана. Время от времени звук воспроизводится с использованием:

try {
    Ringtone r = RingtoneManager.getRingtone(context, uri);
    r.play();
} catch (Exception e) {
    e.printStackTrace();
}

Звуки работают, но через некоторое время они перестают звучать.
Нет ошибок, нет предупреждений, нет сбоев. Просто нет звука.

Мои пользователи тоже жалуются, так что это не похоже на проблему с конкретным устройством.

Android Docs ничего не упоминает об этом. Кто-нибудь знает, почему это?

1 ответ

Решение

Не создавайте рингтон или MediaPlayer в BroadcastReceiver!

Проблема заключалась в контексте рингтона или MediaPlayer. При запуске звука из приемника вещания каждый раз при воспроизведении звука создается новый MediaPlayer или Ringtone. После 28 раз звук просто не воспроизводился.

При воспроизведении звука из IntentSerice или повторном использовании статического экземпляра MediaPlayer или Ringtone все воспроизводится, как ожидалось.

Другие вопросы по тегам