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

Android NFC Reader APP适配Android 12+崩溃问题求助

问题解决方案

崩溃核心原因

你的NFC Reader App崩溃是因为目标SDK版本为API 31(Android 12)及以上时,创建PendingIntent必须指定FLAG_IMMUTABLE或FLAG_MUTABLE标记,而你的代码中创建关联NFC的PendingIntent时未添加该标记。

具体修改步骤

  1. 定位代码中创建PendingIntent的位置(通常在NfcAdapter初始化逻辑里,比如onCreate方法中调用PendingIntent.getActivity()的代码)
  2. 修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:56:08