【发布时间】:2021-09-17 12:04:21
【问题描述】:
我正在开发一个需要从后台startForeground 服务的 SDK。因为它使用后台定位和蓝牙相关的作品。如果应用程序被杀死,则监控在后台执行。这就是我使用前台服务的原因。有一个条件是从后台启动前台服务。
目前,我的 SDK 使用 Service 来处理这项工作。但是Android 12 on-words it doesn't support to start service from the background.
我正在尝试从后台启动服务,引发以下异常。
ForegroundServiceStartNotAllowedException: Service.startForeground() not allowed due to mAllowStartForeground false
我如何使用WorkManager 来解决这个问题,我的所有处理都由Service 类完成,我如何将Service 对象传递给Worker 类并在Worker 类中启动这项工作。
其实我的项目是基于信标技术的。 并且信标信号用于向用户显示不同的建议。
在我当前的实现中,如果应用程序被用户杀死, 并且也接受前台服务,SDK会在后台运行。 并检测信标并提供适当的操作。
我的实现是,如果应用程序使用前台服务“关闭”初始化我的 SDK 然后一段时间后,当应用程序处于后台并尝试从后台启动前台服务时,会抛出此异常。 与前台服务相关的决策由服务器端 API 持有。我会定期检查服务器端值是否发生变化,如果值发生变化,则更改的操作会反映在 SDK 中。
【问题讨论】:
-
“我正在开发一个需要从后台启动前台服务的 SDK”——为什么?为什么需要做前台服务,为什么需要从后台启动?
-
因为它使用后台定位和蓝牙相关的作品。如果应用程序被杀死,则监控将在后台进行。这就是我使用前台服务的原因。存在从后台启动前台服务的条件。
-
我正在启动我的前台服务并在用户单击按钮时从我的应用程序的仪表板显示通知。我在 Android 12 上也遇到了同样的问题。我只跟踪位置和用户活动。我希望这有助于提供更多信息。到目前为止,我只有几次崩溃,但我仍然担心。
标签: android android-service android-workmanager android-12 foregroundnotification