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

Android 12下PendingIntent报错:需指定FLAG_IMMUTABLE/MUTABLE

解决Android 12+ PendingIntent必须指定标志位的问题

核心修复步骤

根据报错栈信息,问题出在com.general.files.NotificationScheduler类的cancelReminder和setReminder方法中——调用PendingIntent.getBroadcast时未指定强制标志位,按以下方式修改即可:

  1. 选择合适的标志位

    • 若不需要后续修改PendingIntent内的Intent内容,优先使用FLAG_IMMUTABLE(官方推荐,安全性更高)
    • 若功能依赖修改PendingIntent(比如内联回复、气泡消息场景),则使用FLAG_MUTABLE
  2. 添加版本兼容的标志位逻辑
    修改PendingIntent.getBroadcast的调用代码,加入对应标志:

    int pendingIntentFlags;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        // Android 12及以上必须指定标志
        pendingIntentFlags = PendingIntent.FLAG_IMMUTABLE;
        // 需可变场景替换为:PendingIntent.FLAG_MUTABLE
    } else {
        // 低版本保留原有标志(示例用0,若之前有自定义标志可替换)
        pendingIntentFlags = 0;
    }
    PendingIntent.getBroadcast(context, requestCode, yourIntent, pendingIntentFlags);
    

    如果你使用AndroidX库,也可以用PendingIntentCompat简化兼容,无需手动判断版本:

    import androidx.core.app.PendingIntentCompat;
    
    PendingIntentCompat.getBroadcast(context, requestCode, yourIntent, PendingIntentCompat.FLAG_IMMUTABLE);
    

报错原因说明

Android 12(API 31)起强制要求创建PendingIntent时指定可变性标志,目的是提升应用安全性,防止第三方应用篡改PendingIntent内的Intent数据。当应用的targetSdkVersion >=31时,未指定FLAG_IMMUTABLE或FLAG_MUTABLE就会触发IllegalArgumentException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:01:35