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

Android NFC中TAG_DISCOVERED、NDEF_DISCOVERED与TECH_DISCOVERED的区别及问题咨询

Android NFC中TAG_DISCOVERED、NDEF_DISCOVERED、TECH_DISCOVERED的区别(Java)

Android NFC系统会按 NDEF_DISCOVERED > TECH_DISCOVERED > TAG_DISCOVERED 的优先级顺序匹配Intent,只有前序Intent匹配失败时,才会触发后续的Intent。下面逐个拆解三者的核心差异:

1. NDEF_DISCOVERED

  • 优先级最高,专门针对存储了NDEF格式数据的NFC标签。
  • 触发条件:标签必须包含有效的NDEF消息,且你的应用在Manifest中声明的<intent-filter>能匹配该NDEF消息的记录类型(比如特定MIME类型、URI或NFC Forum外部类型)。
  • 示例Manifest配置(匹配文本类NDEF标签):
<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="text/plain"/>
</intent-filter>
  • 你的电子货币卡检测不到它,大概率是因为这张卡没有存储NDEF格式的数据,或者它的NDEF数据类型不在你声明的匹配范围内。

2. TECH_DISCOVERED

  • 优先级居中,用于识别支持特定NFC技术标准的标签,和标签内是否有NDEF数据无关。
  • 触发条件:标签支持你在Manifest中通过<tech-list>声明的NFC技术(比如ISO 14443 Type A/B、MIFARE Classic、NfcF等),且NDEF_DISCOVERED未匹配成功。
  • 示例Manifest配置(匹配MIFARE Classic标签):
<intent-filter>
    <action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
           android:resource="@xml/nfc_tech_filter"/>

对应的res/xml/nfc_tech_filter.xml:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.MifareClassic</tech>
    </tech-list>
</resources>
  • 若要读取电子货币卡的具体数据(如余额),通常需要用这个Intent——这类卡一般基于特定NFC技术,但很少携带NDEF数据。

3. TAG_DISCOVERED

  • 优先级最低,是兜底Intent,当前两个Intent都匹配失败时触发。
  • 触发条件:只要是NFC标签被检测到,就会触发,无需满足任何额外数据或技术匹配要求。
  • 它只能获取标签的基础信息(如ID),无法直接访问标签的技术特性或深层数据,适合仅需识别标签存在、获取ID的场景。
  • 你的电子货币卡能被它检测到,就是因为它不满足前两个Intent的触发条件,系统自动触发了这个兜底规则。

针对你的问题总结

你的电子货币卡无法被NDEF_DISCOVERED检测到,核心原因是这张卡没有携带有效的NDEF格式数据,或者你的应用未配置匹配它的NDEF类型过滤规则。如果需要进一步操作这张卡,建议先确定它支持的NFC技术类型,然后通过TECH_DISCOVERED来适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:22:48