我正在尝试从2台设备(Nexus 5和Samsung S5)读取NFC标签。
我正在通过前台调度并使用ACTION_TECH_DISCOVERED
意图来阅读标记。在Samsung S5上,技术列表列出NfcA
,MifareClassic
和Ndef
,但在Nexus 5上,它仅列出NfcA
。
我知道Nexus 5不支持恩智浦的MIFARE Classic标签。那么,我明白为什么它没有列出MifareClassic
。但为什么它也没有在技术列表中显示Ndef
?
当我尝试使用ACTION_NDEF_DISCOVERED
意图阅读标签时,三星S5正好读取它,而Nexus 5甚至无法检测到它。
答案 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
技术对象是没有意义的,因为无论如何都无法使用它来访问数据。