Android中13.5MHz RFID阅读器读取NFC标签的协议适配问题
13.5MHz NFC标签读取的协议问题及代码修正建议
核心结论
13.5MHz NFC标签本身遵循NFC标准协议(如ISO 14443A/B、ISO 15693等),但如果使用的是外接RFID阅读器(而非手机自带NFC模块),必须遵循该阅读器的专属通信协议,不能直接套用Android系统自带的NFC检测逻辑。
你的代码问题所在
从代码里的serialPort、stopSerialIoManager能看出,你用的是外接串口RFID阅读器,但标签检测逻辑却依赖Android系统的NfcAdapter.ACTION_TAG_DISCOVERED——这是手机自带NFC模块的触发机制,和外接阅读器完全不匹配,所以阅读器无法识别标签是必然结果。
正确处理方向
若使用外接RFID阅读器
- 删除系统NFC的Intent监听逻辑,转而通过串口与阅读器通信:
- 按照阅读器厂商提供的文档,发送扫描指令触发标签读取
- 监听串口返回的数据,解析阅读器传回的标签ID或内容
若使用手机自带NFC模块读标签
- 检查标签类型:如果是MIFARE Classic这类非NDEF标签,不能直接用NDEF读取逻辑,需用
MifareClassic类操作 - 优化Intent过滤:将
ACTION_TAG_DISCOVERED替换为更精准的ACTION_NDEF_DISCOVERED(针对带NDEF数据的标签)或ACTION_TECH_DISCOVERED(需要在Manifest中注册支持的NFC技术类型,比如MifareClassic) - 确认
supportsDesiredTechnology方法是否正确判断了标签支持的技术,比如是否包含Ndef或MifareClassic的类名
额外提醒
- 先明确标签具体类型(如MIFARE Ultralight、NTAG等),不同类型对应的读写API存在差异
- 若是外接阅读器,务必获取厂商的通信协议文档,其中会明确扫描指令、数据返回格式等关键信息
内容的提问来源于stack exchange,提问作者Wan Ammar
相关产品推荐
相关产品推荐

