You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除OneSignal库后出现Targeting S+需指定FLAG_IMMUTABLE错误

解决Android Targeting S+时WorkManager引发的PendingIntent标志错误

问题根源

从错误栈可以明确,当前错误并非来自你自己编写的PendingIntent代码,而是androidx.work.impl.utils.ForceStopRunnable内部创建PendingIntent时未指定FLAG_IMMUTABLE或FLAG_MUTABLE标志,属于旧版WorkManager未适配Android 12+(API 31+)的遗留问题。

可行解决办法

  • 确保WorkManager依赖完全更新并无冲突
    你已添加work-runtime-ktx:2.9.1,但需确认项目中没有其他依赖间接引入旧版WorkManager。执行Gradle命令查看依赖树:

    ./gradlew app:dependencies
    

    若发现旧版(如2.7.x及以下)WorkManager依赖,在对应第三方库的依赖配置中添加排除规则,示例:

    implementation('第三方库坐标') {
        exclude group: 'androidx.work', module: 'work-runtime'
    }
    
  • 修正自身代码的PendingIntent标志判断逻辑
    你当前代码判断的是Build.VERSION_CODES.M(API 23),但FLAG_IMMUTABLE/FLAG_MUTABLE的强制要求是从**Android 12(API 31,Build.VERSION_CODES.S)**开始的,正确代码应为:

    PendingIntent.getBroadcast(context, 123, alarmIntent, 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
        } else {
            PendingIntent.FLAG_UPDATE_CURRENT
        }
    )
    

    注意:仅当PendingIntent需要支持内回复、气泡等可变功能时才用FLAG_MUTABLE,否则优先使用FLAG_IMMUTABLE。

  • 排查其他第三方库的适配情况
    移除OneSignal后,仍可能存在其他第三方库(如推送、闹钟、日历类)使用未适配Android 12+的PendingIntent。将所有涉及PendingIntent的依赖升级到最新稳定版。

  • 清理并重建项目
    执行Gradle清理与构建操作,确保依赖更新生效:

    ./gradlew clean build
    

内容的提问来源于stack exchange,提问作者menasoft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:36:04