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

