best/correct 如何在 Android 8+ 上 play/stop 铃声,即使应用程序在后台运行?

What is the best/correct way to play/stop a ringtone on Android 8+ even when the app is in the background?

首先是一些背景信息

当应用程序在 Android 8+ 中处于后台时,我在启动后台服务时遇到了问题。 该文档清楚地描述了 the new limitations 用于后台执行。

所以我继续将我的服务实现为 JobIntentService(推荐用于简单情况的方法)。 这似乎工作得很好......对于我遇到的第一个错误。

播放铃声...应该很容易

在 Android8 之前,我们的应用使用后台服务通过 RingtoneManager 播放铃声(在 onStartCommand() 并在服务停止时停止)。这工作得很好。

由于新的后台执行限制,我也尝试使用 JobIntentService 来完成此任务,但发现它无法明确停止。好的,所以我尝试使用 JobSchedulerJobService (因为据我了解 JobIntentService 基本上应该做没有创建 JobInfo 的麻烦。我没有任何特殊要求,所以我使用了 JobIntentService (setOverrideDeadline(0)) 使用的相同内容。

JobService启动了,但是当我return true from onStartJob()。我正在调查这个 - 也许我在那里做错了什么。

...或者是吗?

这应该很简单吧?

我有点困惑,播放和停止铃声这件简单的事情似乎并不简单,包括背景内容(如果我有一个具有某种呼叫功能的应用程序,我只是需要这个工作,所以我为什么要搞砸这个并在这里重新发明轮子?)。

我主要不是 Android 开发人员,所以我可能遗漏了一些重要的显而易见的事情。我试着用谷歌搜索没完没了,我得到了很多关于如何使用 RingtoneManager 甚至 MediaPlayer 或类似的东西来播放东西的例子,但我没有没看到有提到背景问题

感谢任何意见,谢谢。

我最终使用了前台服务来播放铃声。我仍然可以停止服务并允许服务从后台启动。

股票 android phone 应用程序还显示了一个呼叫通知,所以他们可能在这里做同样的事情。