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

Android 11迁移到13后OneSignal通知崩溃,VERSION_CODES.S未找到求助

问题解决:Android 13迁移后OneSignal通知崩溃+VERSION_CODES.S无法识别

一、崩溃原因复盘

崩溃提示Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.,本质是Android 12(API 31)及以上系统要求所有PendingIntent必须显式指定这两个标记之一,原代码仅传递FLAG_UPDATE_CURRENT,不符合新规范。

二、VERSION_CODES.S无法识别的解决办法

1. 检查Android SDK Platform安装情况

即使配置了compileSdkVersion 33,如果本地未安装**Android 12 (API 31)**的SDK Platform包,VERSION_CODES.S(对应API 31)就会无法识别:

  • 打开Android Studio的SDK Manager → 切换到SDK Platforms标签 → 勾选Android 12 (API 31) → 点击Apply完成安装。

2. 直接使用API数值替代(快速方案)

如果暂时不想安装API 31的SDK,可直接用数值31代替VERSION_CODES.S(VERSION_CODES.S本质就是常量31),代码修改为:

if (Build.VERSION.SDK_INT >= 31) {
    pendingIntent = PendingIntent.getActivity(context,
                    notificationDetails.id, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} else {
    pendingIntent = PendingIntent.getActivity(context,
                    notificationDetails.id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}

3. 确认build.gradle配置正确性

检查模块级build.gradle(或build.gradle.kts):

  • compileSdkVersion需设置为31或更高(你已设为33,符合要求)
  • targetSdkVersion需设为31或更高(当前为31,无问题)

三、额外注意事项

  • 若使用OneSignal SDK,建议升级至最新版本,新版本已内置Android 12+ PendingIntent标记的适配逻辑,可能无需手动修改代码。
  • 标记选择:FLAG_IMMUTABLE适用于绝大多数通知场景;仅当需要后续动态修改PendingIntent内的Intent内容时,才需使用FLAG_MUTABLE。

内容的提问来源于stack exchange,提问作者Robby Ali Darmawan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:50:06