Android NFC Reader APP适配Android 12+崩溃问题求助
问题解决方案
崩溃核心原因
你的NFC Reader App崩溃是因为目标SDK版本为API 31(Android 12)及以上时,创建PendingIntent必须指定FLAG_IMMUTABLE或FLAG_MUTABLE标记,而你的代码中创建关联NFC的PendingIntent时未添加该标记。
具体修改步骤
- 定位代码中创建
PendingIntent的位置(通常在NfcAdapter初始化逻辑里,比如onCreate方法中调用PendingIntent.getActivity()的代码) - 修改
PendingIntent创建代码,添加对应的标记:- 优先使用
FLAG_IMMUTABLE(官方推荐,适用于不需要修改Intent内容的场景,比如NFC标签检测回调) - 仅当需要动态修改
PendingIntent内的Intent数据时,使用FLAG_MUTABLE
- 优先使用
示例代码
原代码(无标记):
PendingIntent pendingIntent = PendingIntent.getActivity( this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0 );
修改后(添加FLAG_IMMUTABLE):
// 适配API31+,使用官方推荐的FLAG_IMMUTABLE int pendingIntentFlags; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { pendingIntentFlags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE; } else { pendingIntentFlags = PendingIntent.FLAG_UPDATE_CURRENT; } PendingIntent pendingIntent = PendingIntent.getActivity( this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), pendingIntentFlags );
注意:如果你的minSdkVersion低于23,必须添加版本判断,避免低版本系统找不到
FLAG_IMMUTABLE/FLAG_MUTABLE常量,同时需要导入android.os.Build类。
其他日志说明
日志中的PRM_CONFIG_Parser、PostureManager错误与本次崩溃无关,属于系统级别的非致命日志,可以忽略。
内容的提问来源于stack exchange,提问作者user3599194
相关产品推荐
相关产品推荐

