Android 12 - 前台服务启动限制

标签 android android-service android-workmanager android-12 foregroundnotification

我正在开发一个 SDK,需要 startForeground 后台服务。因为它使用后台定位和蓝牙相关的作品。如果应用程序被杀死,则监控在后台执行。这就是我使用前台服务的原因。有一个条件是从后台启动前台服务。
目前,我的 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会在后台运行。
并检测信标并提供适当的操作。
我的实现是,如果应用程序使用前台服务“OFF”初始化我的 SDK
然后一段时间后,当应用程序处于后台并尝试从后台启动前台服务时,会抛出此异常。
与前台服务相关的决策由服务器端 API 持有。我定期检查服务器端值是否更改,如果值更改,则更改的操作会反射(reflect)在 SDK 中。

最佳答案

世界上没有人能给你答案。所有这些限制的想法是我们作为开发人员需要优化我们的应用程序。因此,如果这对您来说不可能,则意味着您很可能需要优化您的工作方式。为此,您需要提供有关您正在接收的确切事件、您的用例等的更多信息。
https://developer.android.com/about/versions/12/foreground-services#cases-fgs-background-starts-allowed
如您所见,有关于以下异常(exception)的信息:
您的应用接收需要 BLUETOOTH_CONNECT 或 BLUETOOTH_SCAN 权限的蓝牙广播。
但是您的问题中没有任何内容表明您的用例可能与此有关。
另外,我不明白应用程序是如何被杀死的,但你一直在后台工作。
另外,如果您想不断地做某事-为什么在后台时会发生事件。就在用户打开应用程序时 - 启动服务并继续运行。
您也可以“破解”它并要求用户将您从电池优化中删除。
https://developer.android.com/training/monitoring-device-state/doze-standby#support_for_other_use_cases

关于Android 12 - 前台服务启动限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69223128/

相关文章:

android - 工作经理适合这些情况吗?

Android 录制的 aac(.mp3) 文件无法在 iOS 中播放

java - Android 服务连接泄露

android - 如何使用 Retrofit 解析嵌套的 json ....?

android - 如何提供检查wifi状态的服务?

android - 在后台获取聊天消息

java - WorkManager 中的 Worker 和 ListenableWorker 有什么区别?

android - 如何在 CoroutineWorker 中获取 WorkRequest Id

java - 如何制作可移动且可调整大小的 Canvas 绘制Android?

java - android OpenCV中的卡通效果(需要从灰色转换为彩色)