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 来完成此任务,但发现它无法明确停止。好的,所以我尝试使用 JobScheduler 和 JobService (因为据我了解 JobIntentService 基本上应该做没有创建 JobInfo 的麻烦。我没有任何特殊要求,所以我使用了 JobIntentService (setOverrideDeadline(0)) 使用的相同内容。
JobService启动了,但是当我return true from onStartJob()。我正在调查这个 - 也许我在那里做错了什么。
...或者是吗?
- 我也考虑过 绑定服务,但它看起来很奇怪,因为我还需要从另一个服务调用它(但也许这没问题)。绑定服务不受背景限制的影响,所以这可能是正确的方法。
- 常规 后台服务 在 Android 8 之前工作正常,但我显然不能使用它。
- 我认为 前台服务 不是简单铃声的方式。
- 我什至想过将应用程序提升到前台来解决这个问题,但是通过谷歌搜索,这感觉更像是一个 hack,而不是一个正确的解决方案。
这应该很简单吧?
我有点困惑,播放和停止铃声这件简单的事情似乎并不简单,包括背景内容(如果我有一个具有某种呼叫功能的应用程序,我只是需要这个工作,所以我为什么要搞砸这个并在这里重新发明轮子?)。
我主要不是 Android 开发人员,所以我可能遗漏了一些重要的显而易见的事情。我试着用谷歌搜索没完没了,我得到了很多关于如何使用 RingtoneManager 甚至 MediaPlayer 或类似的东西来播放东西的例子,但我没有没看到有提到背景问题
感谢任何意见,谢谢。
我最终使用了前台服务来播放铃声。我仍然可以停止服务并允许服务从后台启动。
股票 android phone 应用程序还显示了一个呼叫通知,所以他们可能在这里做同样的事情。
首先是一些背景信息
当应用程序在 Android 8+ 中处于后台时,我在启动后台服务时遇到了问题。 该文档清楚地描述了 the new limitations 用于后台执行。
所以我继续将我的服务实现为 JobIntentService(推荐用于简单情况的方法)。 这似乎工作得很好......对于我遇到的第一个错误。
播放铃声...应该很容易
在 Android8 之前,我们的应用使用后台服务通过 RingtoneManager 播放铃声(在 onStartCommand() 并在服务停止时停止)。这工作得很好。
由于新的后台执行限制,我也尝试使用 JobIntentService 来完成此任务,但发现它无法明确停止。好的,所以我尝试使用 JobScheduler 和 JobService (因为据我了解 JobIntentService 基本上应该做没有创建 JobInfo 的麻烦。我没有任何特殊要求,所以我使用了 JobIntentService (setOverrideDeadline(0)) 使用的相同内容。
JobService启动了,但是当我return true from onStartJob()。我正在调查这个 - 也许我在那里做错了什么。
...或者是吗?
- 我也考虑过 绑定服务,但它看起来很奇怪,因为我还需要从另一个服务调用它(但也许这没问题)。绑定服务不受背景限制的影响,所以这可能是正确的方法。
- 常规 后台服务 在 Android 8 之前工作正常,但我显然不能使用它。
- 我认为 前台服务 不是简单铃声的方式。
- 我什至想过将应用程序提升到前台来解决这个问题,但是通过谷歌搜索,这感觉更像是一个 hack,而不是一个正确的解决方案。
这应该很简单吧?
我有点困惑,播放和停止铃声这件简单的事情似乎并不简单,包括背景内容(如果我有一个具有某种呼叫功能的应用程序,我只是需要这个工作,所以我为什么要搞砸这个并在这里重新发明轮子?)。
我主要不是 Android 开发人员,所以我可能遗漏了一些重要的显而易见的事情。我试着用谷歌搜索没完没了,我得到了很多关于如何使用 RingtoneManager 甚至 MediaPlayer 或类似的东西来播放东西的例子,但我没有没看到有提到背景问题
感谢任何意见,谢谢。
我最终使用了前台服务来播放铃声。我仍然可以停止服务并允许服务从后台启动。
股票 android phone 应用程序还显示了一个呼叫通知,所以他们可能在这里做同样的事情。