在阅读NFC技术列表时,奇怪的Android设备行为

时间:2015-06-04 06:50:22

标签: android tags nfc mifare ndef

我正在尝试从2台设备(Nexus 5和Samsung S5)读取NFC标签。

我正在通过前台调度并使用ACTION_TECH_DISCOVERED意图来阅读标记。在Samsung S5上,技术列表列出NfcAMifareClassicNdef,但在Nexus 5上,它仅列出NfcA

我知道Nexus 5不支持恩智浦的MIFARE Classic标签。那么,我明白为什么它没有列出MifareClassic。但为什么它也没有在技术列表中显示Ndef

当我尝试使用ACTION_NDEF_DISCOVERED意图阅读标签时,三星S5正好读取它,而Nexus 5甚至无法检测到它。

1 个答案:

答案 0 :(得分:2)

这不是奇怪的,而是预期的行为:

正如您自己发现的那样,Nexus 5不支持MIFARE Classic,而三星S5则支持MIFARE Classic。 MIFARE Classic的问题在于它使用了ISO / IEC 14443-3中明确定义的防冲突机制,因此可以在所有Android NFC设备上进行检测。除了标准化的防冲突之外,MIFARE Classic还使用专有协议(其框架略有不同,并使用专有加密算法)。由于恩智浦不为该协议的读者提供licenes,因此只有恩智浦芯片组能够实现它。因此,只有配备NXP芯片组的设备(如三星S5,包含PN547 NFC控制器)才能访问MIFARE Classic卡上的数据。其他设备(例如具有Broadcom NFC芯片组的设备,如Nexus 5或Samsung mini芯片组,如S5 mini)不支持MIFARE Classic协议,因此无法访问存储在这些芯片上的数据。

因此,MifareClassic标记技术未显示在这些设备上,因为平台不支持发送MIFARE Classic命令(这是您使用MifareClassic技术可以做的事情宾语)。而且,无法发送存储器访问命令,也意味着无法访问存储在标签上的数据。这就是为什么没有显示Ndef技术的原因:NDEF是NFC标签之上的数据抽象层,因此,无法访问数据意味着也无法通过NDEF抽象访问相同的数据层。因此,提供Ndef技术对象是没有意义的,因为无论如何都无法使用它来访问数据。