【问题标题】:Android 12 - Foreground service launch restrictionsAndroid 12 - 前台服务启动限制
【发布时间】: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


【解决方案1】:

世界上没有人能给你答案。所有这些限制的想法是我们作为开发人员需要优化我们的应用程序。因此,如果这对您来说不可能,则意味着您很可能需要优化您的工作方式。为此,您需要提供更多信息,说明您收到的具体事件、您的用例等。

https://developer.android.com/about/versions/12/foreground-services#cases-fgs-background-starts-allowed

如您所见,有以下例外情况的信息:

您的应用接收需要 BLUETOOTH_CONNECT 或 BLUETOOTH_SCAN 权限的蓝牙广播。

但您的问题中没有任何内容表明您的用例可能与此有关。

另外,我不明白应用程序是如何被杀死的,但你一直在后台工作。

此外,如果您想不断地做某事-为什么在您处于后台时会发生事件。就在用户打开应用程序时 - 启动服务并继续运行。

您也可以直接“破解”它并要求用户将您从电池优化中移除。

https://developer.android.com/training/monitoring-device-state/doze-standby#support_for_other_use_cases

【讨论】:

  • Yavor Mitev 感谢您的回复。我刚刚更新了我的问题,添加了一些关于我的项目的更多信息,请看一下。
【解决方案2】:

根据官方docs的说法,如果你的应用发生以下情况之一,它应该能够启动FGS:

您的应用接收需要 BLUETOOTH_CONNECT 或 BLUETOOTH_SCAN 权限的蓝牙广播。

或

您的应用收到与地理围栏或活动识别转换相关的事件。

这两个对于您的用例来说似乎是相当不错的候选者,至少我是这么理解的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2021-04-07
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多