调度WorkManager任务触发InvalidForegroundServiceTypeException求助
结合你的场景,导致该异常的核心原因是Android 14(API 34)对前台服务类型的强制校验规则,与WorkManager启动前台服务时的参数传递不匹配,具体可能存在以下几种情况:
Worker未显式指定匹配的ForegroundInfo服务类型
即便你在Manifest中给SystemForegroundService配置了foregroundServiceType="dataSync",但如果自定义Worker在调用setForegroundAsync()时,创建的ForegroundInfo对象未传入对应的serviceType参数,WorkManager内部启动前台服务时仍会使用默认的type none,触发API 34的禁止规则。正确的
ForegroundInfo创建方式需明确指定类型:val foregroundInfo = ForegroundInfo( notificationId, buildNotification(), ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC // 必须与Manifest配置的类型匹配 ) setForegroundAsync(foregroundInfo)WorkManager 2.9.0的内部兼容性细节遗漏
虽然已升级到2.9.0,但部分场景下WorkManager启动SystemForegroundService时,可能未正确读取Manifest中配置的foregroundServiceType,导致启动时未传递类型参数。这种情况需通过Worker显式指定服务类型,覆盖默认行为。Manifest合并的隐性冲突
即便你确认合并后的Manifest包含目标配置,仍有可能存在其他依赖库也声明了SystemForegroundService,导致foregroundServiceType被意外覆盖。可查看app/build/intermediates/merged_manifests/目录下的完整合并后Manifest文件,确认最终的foregroundServiceType确实为dataSync,未被其他配置覆盖。
内容的提问来源于stack exchange,提问作者casolorz

