Я использую TYPE_NOTIFICATION, но, судя по всему, мой код был более или менее точно таким же.
Я обнаружил, что воспроизведение звука внутри нового обработчика помогло в моем случае:
Uri currentUri = RingtoneManager.getActualDefaultRingtoneUri(
this.context, RingtoneManager.TYPE_RINGTONE);
final Ringtone ringtone = RingtoneManager.getRingtone(this.context,
currentUri);
if (ringtone != null) {
new Handler().post(new Runnable() {
@Override
public void run() {
ringtone.play();
}
});
}
Почему это решило проблему?
Я считаю, что RingtoneManager может использовать поток пользовательского интерфейса для воспроизведения звука, поэтому, если поток пользовательского интерфейса будет использоваться для создания / рисования представлений или выполнения вычислений одновременно с воспроизведением звука, он рискует прерваться.
При использовании нового обработчика воспроизведение ставится в очередь до окончания других операций, в результате чего звук не прерывается.
По крайней мере, таково мое восприятие: Что именно делает метод post?