我有一个开放了数小时的应用程序,并且使用了带有前台通知的后台服务。偶尔使用以下方式播放声音:

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


声音正在工作,但过一会儿声音不再播放。
没有错误,没有警告,没有崩溃。只是没有声音。

我的用户也在抱怨,所以这看起来不像设备特定的问题。

Android Docs对此一无所知。
有人知道这是为什么吗?

最佳答案

不要在BroadcastReceiver中创建铃声或MediaPlayer!

问题是铃声或MediaPlayer的上下文。通过从广播接收器触发声音,每次播放声音时都会创建一个新的MediaPlayer或铃声。 28次之后,声音不再播放了。

通过播放来自IntentSerice的声音,或重新使用MediaPlayer或Ringtone的静态实例,所有内容均按预期播放。

10-07 19:33
查看更多