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
相关产品推荐
相关产品推荐

