startForegroundService() 未在 2 台三星设备上启动服务

Posted

技术标签:

【中文标题】startForegroundService() 未在 2 台三星设备上启动服务【英文标题】:startForegroundService() does not start service on 2 Samsung devices 【发布时间】:2022-01-21 07:01:48 【问题描述】:

现在启动此服务的代码如下所示

if (!BuildConfig.MSG_ALLOWED && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 
  Log.v("Foreground SmsService Launch");
  context.startForegroundService(intent);
 else 
  Log.v("Regular SmsService Launch");
  context.startService(intent);

不幸的是,日志语句没有包含在我的两个用户正在使用的版本中,但间接证据非常令人信服,表明满足适当的条件来进行 startForegroundService() 调用。对于大多数用户来说,这可以正常工作,但对于这两个用户来说,请求的服务永远不会启动。没有抛出异常,系统日志报告

W ActivityManager:不允许后台启动:服务 Intent act=net.anei.cadpage.Telephony.SMS_RECEIVED flg=0x19000010 cmp=net.anei.cadpage/.SmsService (has extras) 到 net.anei.cadpage/ .SmsService from pid=10201 uid=10234 pkg=net.anei.cadpage startFg?=true

这两个用户都在三星设备上运行 android 9,这开始看起来很可疑。关于我可以做些什么来解决问题的任何建议?

由于有人可能会问我为什么要从后台接收器启动前台服务,答案是我正在处理传入的文本消息,该消息通常不受这些后台服务启动限制的影响。但是 Android 系统不知道我正在处理传入的短信,因为不允许通过 Play 商店分发的常规应用程序这样做。我的用户必须侧载一个辅助应用来监控传入的短信并将它们传递给常规应用。

【问题讨论】:

您的目标版本是什么?如果您的目标版本号太高,则不允许从后台启动前台服务,包括广播接收器。而且我不希望它在未来变得更加宽容。听起来你正在做一些不应该做的事情,除非它是一个私人应用程序。在可能的情况下,请参阅developer.android.com/guide/components/…。 【参考方案1】:

有an issue on android 9 正在启动前台服务。 如果活动没有完全恢复,startForegroundService 会抛出异常。 为确保您可以启动前台服务,您需要检查您的应用是否具有IMPORTANCE_FOREGROUND 重要性,然后才启动该服务,否则将其推迟。

【讨论】:

听起来不像这里发生的事情。呼叫是从广播接收器发出的,而不是处于非活动状态。并且调用没有崩溃或抛出异常,它只是没有启动服务

以上是关于startForegroundService() 未在 2 台三星设备上启动服务的主要内容,如果未能解决你的问题,请参考以下文章

startForegroundService - 无法使用 setContentIntent + addAction?

startForegroundService() 未在 2 台三星设备上启动服务

想要隐藏通知但获取 Context.startForegroundService() 并没有调用 Service.startForeground()

将 Context.startForegroundService(Intent) 而不是 Context.startService(Intent) 用于前台服务有啥好处吗?

绑定服务崩溃与“Context.startForegroundService() 没有然后调用 Service.startForeground()”错误

Context.startForegroundService 然后没有调用 Service.startForeground