jer*_*cob 24 android android-service foregroundnotification android-workmanager android-12
我正在开发一个SDK,需要从后台启动Foreground服务。因为它使用的是后台定位和蓝牙相关的作品。如果应用程序被终止,监控将在后台执行。这就是我使用前台服务的原因。有一个条件是从后台启动前台服务。
目前,我的 SDK 使用Service来处理这项工作。但Android 12上不支持从后台启动服务。
我试图从后台启动服务,下面的异常抛出。
ForegroundServiceStartNotAllowedException: Service.startForeground() not allowed due to mAllowStartForeground false
Run Code Online (Sandbox Code Playgroud)
我如何使用WorkManager 来解决这个问题,我的所有处理都是由 Service 类完成的,如何将 Service 对象传递给Worker类并在 Worker 类中启动此作业。
实际上,我的项目是基于信标技术的。信标信号用于向用户显示不同的推荐。
在我当前的实现中,如果应用程序被用户杀死,并且还接受前台服务,则SDK将在后台运行。并检测信标并提供适当的操作。
我的实现是,如果应用程序使用前台服务“关闭”来初始化我的 SDK,那么稍后,当应用程序位于后台并尝试从后台启动前台服务时,会抛出此异常。与前台服务相关的决策由服务器端 API 持有。我定期检查服务器端值是否更改,如果值更改,则更改后的操作会反映在 SDK 中。
小智 8
世界上没有人能给你答案。所有这些限制的目的是,我们作为开发人员需要优化我们的应用程序。因此,如果这对您来说不可能,则很可能意味着您需要优化工作方式。为此,您需要提供更多信息,说明您正在接收的具体事件、您的用例到底是什么等。
如您所见,有有关以下例外情况的信息:
您的应用程序收到需要 BLUETOOTH_CONNECT 或 BLUETOOTH_SCAN 权限的蓝牙广播。
但您的问题中没有任何内容表明您的用例可能与此相关。
另外,我不明白该应用程序如何被杀死,但你继续在后台工作。
另外,如果你想不断地做某事 - 为什么当你在后台时会发生一个事件。当用户打开应用程序时 - 启动服务并保持运行。
您也可以“破解”它并要求用户将您从电池优化中删除。
早些时候我们用来Service运行后台任务。但是,由于Android 12 - Foreground service launch restrictions,我们将无法调用Service来执行 Android 12+ 的后台任务。
所以从现在开始,从targetSdk 31开始,Service只有当应用程序位于前台时才能调用。当应用程序关闭或应用程序转到后台时,调用ServiceusingstartForegroundService将导致ForegroundServiceStartNotAllowedException.
因此,要执行后台任务,我们需要使用Worker而不是Service. 请参考这个答案以了解它是如何实现的。希望能帮助到你。另外,请参阅以下链接以获取需要进行哪些更改的高级概述。
| 归档时间: |
|
| 查看次数: |
25818 次 |
| 最近记录: |