【发布时间】: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/…。
标签: android service startforegroundservice