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

Android 12(S+ API31+)NFC开发出现Targeting S+报错如何修复

问题根源

该报错是Android 12(API 31及以上)系统对PendingIntent的强制限制导致的:系统要求所有PendingIntent必须显式声明可变性,也就是必须添加FLAG_IMMUTABLE(不可修改)或FLAG_MUTABLE(可修改)标记,你原有代码中创建PendingIntent时最后一个参数传了0,没有指定对应的标记,所以触发了异常。

修复方案

仅需要修改onCreate方法中创建PendingIntent的代码段即可,绝大多数NFC前台分发场景不需要修改PendingIntent内容,推荐使用更安全的FLAG_IMMUTABLE标记,修改后代码如下:

pendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    PendingIntent.getActivity(
        this, 
        0, 
        Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 
        PendingIntent.FLAG_IMMUTABLE
    )
} else {
    // 低于API 23的版本不支持FLAG_IMMUTABLE,直接传0即可
    PendingIntent.getActivity(
        this, 
        0, 
        Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 
        0
    )
}

如果你的业务需要后续修改PendingIntent携带的Intent数据,把FLAG_IMMUTABLE替换为FLAG_MUTABLE即可,非必要场景不建议使用可变标记,会存在安全风险。

你原有代码的其他逻辑、Manifest中的NFC权限配置均无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:04